|
14 | 14 | @assert isequal(differentiate(:(a * x ^ 2), :x), :(a * (2 * x))) |
15 | 15 | @assert isequal(differentiate(:(2 ^ x), :x), :(*(^(2, x), 0.6931471805599453))) |
16 | 16 | @assert isequal(differentiate(:(sin(x)), :x), :(cos(x))) |
17 | | -@assert isequal(differentiate(:(cos(x)), :x), :(-sin(x))) |
| 17 | +@assert isequal(differentiate(:(cos(x)), :x), :(*(-1,sin(x)))) # needs a better simplify |
18 | 18 | @assert isequal(differentiate(:(tan(x)), :x), :(1 + tan(x)^2)) |
19 | 19 | @assert isequal(differentiate(:(exp(x)), :x), :(exp(x))) |
20 | 20 | @assert isequal(differentiate(:(log(x)), :x), :(1 / x)) |
21 | 21 | @assert isequal(differentiate(:(sin(x) + sin(x)), :x), :(cos(x) + cos(x))) |
22 | | -@assert isequal(differentiate(:(sin(x) - cos(x)), :x), :(cos(x) - (-sin(x)))) # Simplify -(a, -(b)) => +(a, b) |
| 22 | +@assert isequal(differentiate(:(sin(x) - cos(x)), :x), :(-(cos(x),*(-1,sin(x))))) # Simplify -(a, -(b)) => +(a, b) |
23 | 23 | @assert isequal(differentiate(:(x * sin(x)), :x), :(sin(x) + x * cos(x))) |
24 | 24 | @assert isequal(differentiate(:(x / sin(x)), :x), :((sin(x) - x * cos(x)) / (sin(x)^2))) |
25 | | -@assert isequal(differentiate(:(sin(sin(x))), :x), :(*(cos(sin(x)),cos(x)))) |
26 | | -@assert isequal(differentiate(:(sin(cos(x) + sin(x))), :x), :(*(cos(+(cos(x),sin(x))),+(-(sin(x)),cos(x))))) # Clean this up |
27 | | -@assert isequal(differentiate(:(exp(-x)), :x), :(exp(-x) * -1)) # Simplify this to -(exp(-x)) |
28 | | -@assert isequal(differentiate(:(log(x^2)), :x), :(*(/(1,^(x,2)),*(2,x)))) # Clean this up |
| 25 | +@assert isequal(differentiate(:(sin(sin(x))), :x), :(*(cos(x),cos(sin(x))))) |
| 26 | +@assert isequal(differentiate(:(sin(cos(x) + sin(x))), :x), :(*(+(*(-1,sin(x)),cos(x)),cos(+(cos(x),sin(x)))))) # Clean this up |
| 27 | +@assert isequal(differentiate(:(exp(-x)), :x), :(*(-1,exp(-(x))))) # Simplify this to -(exp(-x)) |
| 28 | +@assert isequal(differentiate(:(log(x^2)), :x), :(/(*(2,x),^(x,2)))) |
29 | 29 | @assert isequal(differentiate(:(x^n), :x), :(*(n, ^(x, -(n, 1))))) |
30 | 30 | @assert isequal(differentiate(:(n^x), :x), :(*(^(n, x), log(n)))) |
31 | | -@assert isequal(differentiate(:(n^n), :x), :(^(n,n))) |
| 31 | +@assert isequal(differentiate(:(n^n), :x), 0) |
32 | 32 |
|
33 | 33 | # |
34 | 34 | # Multivariate Calculus |
@@ -63,75 +63,39 @@ y = BasicVariable(:y) |
63 | 63 | @assert isequal(differentiate(:(sin(sin(x))), :x), :(*(cos(sin(x)),cos(x)))) |
64 | 64 | @assert isequal(differentiate(@sexpr(sin(sin(x))), x), :(*(cos(sin($x)),cos($x)))) |
65 | 65 |
|
66 | | -# |
67 | | -# Chain rule |
68 | | -# |
69 | | - |
70 | | -@assert isequal(chainRule(@sexpr(3 * x), x), :(1*3)) |
71 | | -@assert isequal(chainRule(:(sin(sin(x))), :x), :(*(*(1,cos(x)),cos(sin(x))))) |
72 | | -@assert isequal(chainRule(@sexpr(sin(sin(x))), x), :(*(*(1,cos($(x))),cos(sin($(x)))))) |
73 | | - |
74 | 66 | function testfun(x) |
75 | 67 | z = BasicVariable(:z) |
76 | | - chainRule(@sexpr(3*x + x^2*z), z) |
| 68 | + differentiate(@sexpr(3*x + x^2*z), z) |
77 | 69 | end |
78 | 70 |
|
79 | 71 | @assert isequal(testfun(x), :(*(1,^($(x),2)))) |
80 | 72 | @assert isequal(testfun(3), :(*(1,^(3,2)))) |
81 | 73 | @assert isequal(testfun(@sexpr(x+y)), :(*(1,^(+($(x),$(y)),2)))) |
82 | 74 |
|
83 | | -@assert isequal(chainRule(:(2), :x), 0) |
84 | | -@assert isequal(chainRule(:(x), :x), 1) |
85 | | -@assert isequal(chainRule(:(x + x), :x), 2) |
86 | | -@assert isequal(chainRule(:(x - x), :x), 0) |
87 | | -@assert isequal(chainRule(:(2 * x), :x), 2) |
88 | | -@assert isequal(chainRule(:(x * 2), :x), 2) |
89 | | -@assert isequal(chainRule(:(a * x), :x), :a) |
90 | | -@assert isequal(chainRule(:(x * a), :x), :a) |
91 | | -@assert isequal(chainRule(:(x ^ 2), :x), :(2 * x)) |
92 | | -@assert isequal(chainRule(:(a * x ^ 2), :x), :(a * (2 * x))) |
93 | | -@assert isequal(chainRule(:(2 ^ x), :x), :(*(^(2, x), 0.6931471805599453))) |
94 | | -@assert isequal(chainRule(:(sin(x)), :x), :(cos(x))) |
95 | | -@assert isequal(chainRule(:(cos(x)), :x), :(-sin(x))) |
96 | | -@assert isequal(chainRule(:(tan(x)), :x), :(1 + tan(x)^2)) |
97 | | -@assert isequal(chainRule(:(exp(x)), :x), :(exp(x))) |
98 | | -@assert isequal(chainRule(:(log(x)), :x), :(1 / x)) |
99 | | -@assert isequal(chainRule(:(sin(x) + sin(x)), :x), :(cos(x) + cos(x))) |
100 | | -@assert isequal(chainRule(:(sin(x) - cos(x)), :x), :(cos(x) - (-sin(x)))) # Simplify -(a, -(b)) => +(a, b) |
101 | | -@assert isequal(chainRule(:(x * sin(x)), :x), :(sin(x) + x * cos(x))) |
102 | | -@assert isequal(chainRule(:(x / sin(x)), :x), :((sin(x) - x * cos(x)) / (sin(x)^2))) |
103 | | -@assert isequal(chainRule(:(sin(sin(x))), :x), :(*(cos(sin(x)),cos(x)))) |
104 | | -@assert isequal(chainRule(:(sin(cos(x) + sin(x))), :x), :(*(cos(+(cos(x),sin(x))),+(-(sin(x)),cos(x))))) # Clean this up |
105 | | -@assert isequal(chainRule(:(exp(-x)), :x), :(exp(-x) * -1)) # Simplify this to -(exp(-x)) |
106 | | -@assert isequal(chainRule(:(log(x^2)), :x), :(*(/(1,^(x,2)),*(2,x)))) # Clean this up |
107 | | -@assert isequal(chainRule(:(x^n), :x), :(*(n, ^(x, -(n, 1))))) |
108 | | -@assert isequal(chainRule(:(n^x), :x), :(*(^(n, x), log(n)))) |
109 | | -@assert isequal(chainRule(:(n^n), :x), 0) |
110 | | - |
111 | | -chainRule(:(2), :x) |
112 | | -chainRule(:(x), :x) |
113 | | -chainRule(:(x + x), :x) |
114 | | -chainRule(:(x - x), :x) |
115 | | -chainRule(:(2 * x), :x) |
116 | | -chainRule(:(x * 2), :x) |
117 | | -chainRule(:(a * x), :x) |
118 | | -chainRule(:(x * a), :x) |
119 | | -chainRule(:(x ^ 2), :x) |
120 | | -chainRule(:(a * x ^ 2), :x) |
121 | | -chainRule(:(2 ^ x), :x) |
122 | | -chainRule(:(sin(x)), :x) |
123 | | -chainRule(:(cos(x)), :x) |
124 | | -chainRule(:(tan(x)), :x) |
125 | | -chainRule(:(exp(x)), :x) |
126 | | -chainRule(:(log(x)), :x) |
127 | | -chainRule(:(sin(x) + sin(x)), :x) |
128 | | -chainRule(:(sin(x) - cos(x)), :x) |
129 | | -chainRule(:(x * sin(x)), :x) |
130 | | -chainRule(:(x / sin(x)), :x) |
131 | | -chainRule(:(sin(sin(x))), :x) |
132 | | -chainRule(:(sin(cos(x) + sin(x))), :x) |
133 | | -chainRule(:(exp(-x)), :x) |
134 | | -chainRule(:(log(x^2)), :x) |
135 | | -chainRule(:(x^n), :x) |
136 | | -chainRule(:(n^x), :x) |
137 | | -chainRule(:(n^n), :x) |
| 75 | +differentiate(:(2), :x) |
| 76 | +differentiate(:(x), :x) |
| 77 | +differentiate(:(x + x), :x) |
| 78 | +differentiate(:(x - x), :x) |
| 79 | +differentiate(:(2 * x), :x) |
| 80 | +differentiate(:(x * 2), :x) |
| 81 | +differentiate(:(a * x), :x) |
| 82 | +differentiate(:(x * a), :x) |
| 83 | +differentiate(:(x ^ 2), :x) |
| 84 | +differentiate(:(a * x ^ 2), :x) |
| 85 | +differentiate(:(2 ^ x), :x) |
| 86 | +differentiate(:(sin(x)), :x) |
| 87 | +differentiate(:(cos(x)), :x) |
| 88 | +differentiate(:(tan(x)), :x) |
| 89 | +differentiate(:(exp(x)), :x) |
| 90 | +differentiate(:(log(x)), :x) |
| 91 | +differentiate(:(sin(x) + sin(x)), :x) |
| 92 | +differentiate(:(sin(x) - cos(x)), :x) |
| 93 | +differentiate(:(x * sin(x)), :x) |
| 94 | +differentiate(:(x / sin(x)), :x) |
| 95 | +differentiate(:(sin(sin(x))), :x) |
| 96 | +differentiate(:(sin(cos(x) + sin(x))), :x) |
| 97 | +differentiate(:(exp(-x)), :x) |
| 98 | +differentiate(:(log(x^2)), :x) |
| 99 | +differentiate(:(x^n), :x) |
| 100 | +differentiate(:(n^x), :x) |
| 101 | +differentiate(:(n^n), :x) |
0 commit comments