Matlab功能 - 如何获得"清除"功能

时间:2017-06-16 09:48:17

标签: matlab

我有一个非常长的方程(泰勒多项式),系数为fafxafya(依此类推,见下文)。这些用于近似f点处的函数A = (a,b)的值。变量ab是我想要开发泰勒多项式的点的两个组成部分。

等式:

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,其中我的计算系数是实际的"放入"而且不仅是fxxyfxya等变量名称。

例如,所有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;

1 个答案:

答案 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