taylor series method expansion

14 ビュー (過去 30 日間)
PJS KUMAR
PJS KUMAR 2018 年 9 月 22 日
コメント済み: Torsten 2018 年 9 月 27 日
I wrote the following code
function yb=taylor(f,a,b,ya,n)
syms x y;
h=(b-a)/n;
y(1)=ya;
y(2)=f;
ht=h.^(0:5)./factorial(0:5)
for i=2:3
y(i+1)=diff(y(i),x);
end
y
I got the output as follows
>> f=@(x)x^2+y^2;
>> taylor(f,0,0.8,1.5,4)
ht =
1.0000 0.2000 0.0200 0.0013 0.0001 0.0000
y =
[ 3/2, x^2 + y(x)^2, 2*x + 2*y(x)*diff(y(x), x), 2*diff(y(x), x)^2 + 2*y(x)*diff(y(x), x, x) + 2]
Suggest me how to perform the following actions
1) I want to evaluate y at different values of x
2) Multiply ht and y elements and sum
  4 件のコメント
PJS KUMAR
PJS KUMAR 2018 年 9 月 25 日
編集済み: PJS KUMAR 2018 年 9 月 25 日
I wrote the following code for Taylor series expansion
function yb=taylor(f,a,b,ya,n)
syms x y;
h=(b-a)/n;
y(1)=ya;
y(2)=f;
ht=h.^(0:3)./factorial(0:3)
for i=2:3
y(i+1)=diff(y(i),x);
end
s=sum(ht.*y)
I run code and got the following output
>> syms x y(x);
>> f=@(x)x^2+y^2;
>> taylor(f,1,3,0.8,4)
s =
x/4 + (y(x)*diff(y(x), x))/4 + diff(y(x), x)^2/24 + y(x)^2/2 + (y(x)*diff(y(x), x, x))/24 + x^2/2 + 101/120
Now i want to evaluate the output 's' at different values of x and y, where x is from a to b and y(a)=0.8
Walter Roberson
Walter Roberson 2018 年 9 月 25 日
y' = x^2+y^2, for the values of x = 1 (0.5) 3 with y(1)=0.8
I am having difficulty understanding the initial conditions. Could you confirm that you are referring to
syms y(x)
>> simplify(dsolve(diff(y,x) == x^2+y^2, y(1)==0.8))
ans =
piecewise(C5 ~= 0, (x*(4*besselj(-1/4, 1/2)*besselj(-3/4, x^2/2) + 4*besselj(1/4, 1/2)*besselj(3/4, x^2/2) + 5*besselj(-3/4, 1/2)*besselj(3/4, x^2/2) - 5*besselj(3/4, 1/2)*besselj(-3/4, x^2/2)))/(4*besselj(1/4, 1/2)*besselj(-1/4, x^2/2) - 4*besselj(-1/4, 1/2)*besselj(1/4, x^2/2) + 5*besselj(-3/4, 1/2)*besselj(-1/4, x^2/2) + 5*besselj(3/4, 1/2)*besselj(1/4, x^2/2)))
and you want taylor expansion of that without having solved the differential equation ?

サインインしてコメントする。

採用された回答

PJS KUMAR
PJS KUMAR 2018 年 9 月 25 日
function D = dy(x,y)
f = x^2+y^2;
df = 2*x+2*y*f;
d2f = 2+2*(f^2+y*df);
d3f = 2*(2*f*df+f*df+y*d2f);
d4f = 2*(2*(df^2+f*d2f)+df^2+f*d2f+f*d2f+y*d3f);
D = [f df d2f d3f d4f];
end
suggest me to change the above code as given below, so that the differentiation is calculated by using diff function, without giving the differentiation directly in the program.
function D = dy(x,y)
f = x^2+y^2;
df = diff(f);
d2f = diff(df);
---
---
  13 件のコメント
Walter Roberson
Walter Roberson 2018 年 9 月 26 日
As I tried to get you to understand before:
If you are using a symbolic variable with a particular name, then you should strongly avoid using the same variable name for a different purpose, such as storing a list of particular locations to execute at, or such as storing the results of calculating the taylor series at particular locations.
Torsten
Torsten 2018 年 9 月 27 日
1. n is undefined.
2. You use i as a loop variable in both nested loops.
3. Walter's remark.

サインインしてコメントする。

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2018 年 9 月 22 日
As I already explained to you, because you have
y = [ 3/2, x^2 + y(x)^2, 2*x + 2*y(x)*diff(y(x), x), 2*diff(y(x), x)^2 + 2*y(x)*diff(y(x), x, x) + 2]
then the y on the left side refers to the same thing as the y on the right side, and so y(x) on the right side signifies array indexing. Your y vector is 5 elements long, so the only valid values of x for this would be 1, 2, 3, 4, or 5. Each y(x) would resolve to a numeric scalar value, and diff() of a numeric scalar value is empty. Any operation involving an empty array returns an empty array, so all of the entries except the first two are going to disappear, leaving you only [3/2, x^2 + y(x)^2] to work with for preliminary consistency.
Now, with that subset, can x = 1 be made self-consistent? That would require that y(1) be 3/2, which seems plausible. With the subset, can x = 2 be made self-consistent? That would require that y(2) = x^2 + y(x)^2 = 2^2 + y(2)^2 . Rewriting as z = 4 + z^2 we can see that has only complex roots 1/2-1i*sqrt(15)*(1/2), 1/2+1i*sqrt(15)*(1/2) . Is that acceptable, to force y(2) to be complex valued?

カテゴリ

Help Center および File ExchangeSymbolic Math Toolbox についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by