1. A method for designing a composite laminate, comprising: (a) selecting design variable values for a design of a first ply; (b) computing a stream function for the first ply in accordance with the selected design variable values; (c) computing a balancing ply stream function for a second ply that balances or nearly balances the first ply; (d) computing a respective fiber angle distribution of each of the first and second plies based on the respective stream functions for the first and second plies; (e) computing a thickness buildup of the first ply based on the stream function for the first ply; (f) analyzing the simulated structure of a laminate comprising the first and second plies simulated by the results of the foregoing computing steps and additional plies; (g) computing one or more measures of merit for the simulated structure; and (h) iterating steps (a) through (g) until an optimum value of one or more of the measures of merit is obtained