我有一个非常长的方程(泰勒多项式),系数为fa
,fxa
,fya
(依此类推,见下文)。这些用于近似f
点处的函数A = (a,b)
的值。变量a
和b
是我想要开发泰勒多项式的点的两个组成部分。
等式:
t = @(x,y) fa + fxa .* (x-a) + fya .* (y-b) + 1/2 .* fxxa.*(x-a).^2 + ...
1/2 .* fxya .* (x-a).*(y-b) + fyya .* (y-b).^2 + ...
1/6 .* fxxxa .* (x-a).^3 + 1/2 .* fxxya .* (x-a).^2.*(y-b) + ...
1/2 .* fxyya .* (x-a).*(y-b).^2 + 1/6 .* fyyya .* (y-b).^3;
所有名为fxyya
的变量都是整数值。
我想要一个版本的函数t
,其中我的计算系数是实际的"放入"而且不仅是fxxy
和fxya
等变量名称。
例如,所有0项都会消失,等等。
我能得到那个吗?
供参考,所有代码:
syms x y;
%f = input('Bitte geben Sie die zu evaluierende Funktion ein:','s');
f = 'exp(x^2+y^3)+x*y*(x+y)';
f = sym(f);
f = symfun(f, symvar(f, 2));
a = 0;
b = 0;
fx = diff(f,x);
fy = diff(f,y);
fxx = diff(fx,x);
fyy = diff(fy,y);
fxy = diff(fx,y);
fxxx = diff(fxx,x);
fxxy = diff(fxx,y);
fxyy = diff(fxy,y);
fyyy = diff(fyy,y);
fa = f(a,b);
fxa = fx(a,b);
fya = fy(a,b);
fxxa = fxx(a,b);
fyya = fyy(a,b);
fxya = fxy(a,b);
fxxxa = fxxx(a,b);
fxxya = fxxy(a,b);
fxyya = fxyy(a,b);
fyyya = fyyy(a,b);
t = @(x,y) fa + fxa .* (x-a) + fya .* (y-b) + 1/2 .* fxxa.*(x-a).^2 + 1/2 .* fxya .* (x-a).*(y-b) + fyya .* (y-b).^2 + 1/6 .* fxxxa .* (x-a).^3 + 1/2 .* fxxya .* (x-a).^2.*(y-b) + 1/2 .* fxyya .* (x-a).*(y-b).^2 + 1/6 .* fyyya .* (y-b).^3;
答案 0 :(得分:1)
您可以使用subs(t)
,但下面是代码的更干净版本,无需subs
...
您声明系数是整数,但您的示例代码会将它们创建为分析差异syms
变量!以下是您的代码的修改,不需要使用subs
。
% Set up symbolic x and y, and symbolic function f
syms x y;
f = symfun(exp(x^2+y^3)+x*y*(x+y), [x y]);
% Set up points a and b
a = 0; b = 0;
% Get derivative functions analytically (these need to be evaluated at some points x,y)
fx = diff(f,x); fy = diff(f,y);
fxx = diff(fx,x); fyy = diff(fy,y); fxy = diff(fx,y);
fxxx = diff(fxx,x); fxxy = diff(fxx,y); fxyy = diff(fxy,y);
fyyy = diff(fyy,y);
% Define symbolic function t
t = symfun(f(a,b) + fx(a,b).*(x-a) + fy(a,b).*(y-b) + ...
(1/2).*fxx(a,b).*(x-a).^2 + (1/2).*fxy(a,b).*(x-a).*(y-b) + fyy(a,b).*(y-b).^2 + ...
(1/6).*fxxx(a,b).*(x-a).^3 + (1/2).*fxxy(a,b).*(y-b).*(x-a).^2 + ...
(1/2).*fxyy(a,b).*(x-a).*(y-b).^2 + (1/6).*fyyy(a,b).*(y-b).^3, [x,y]);
t
% output: t(x, y) = x^2*y + x^2 + x*y^2 + y^3 + 1