Matlab符号计算与数值计算对比

  • Matlab的符号计算,需要用到一些常用符号工具箱函数

\qquad 例如画出 f ( x ) = x 2 f(x)=x^2 f(x)=x2 [ 0 , 3 ] [0,3] [0,3] 上的微分值:

\qquad (1) 首先构造符号变量x,符号表达式f(x) = x^2;再利用工具箱函数 df = diff(f) 直接求出其导数为 df = 2*x。因此,符号计算的过程不会产生误差。

\qquad (2) 微分值可以直接使用工具箱函数subs(df,x1)或者subs(df,x,x1),其中x代表符号表达式df中所采用的符号变量(或者通过symvar(df)自动获取),x1 为待求解的点

\qquad  多变量函数在涉及到需要采用不同符号变量的时候,可以采用subs(df,symvar(df),x1)的方式

\qquad (3) 通过vpa(x,n) 设置符号数x的精度为n

\qquad (4) 最后将符号数强制类型转换为浮点型数值

\qquad 其中,(2)~(4) 综合在一起就是val = double(vpa(subs(df,symvar(df),x0),4));

% symbolic
syms x
f2 = x^2
figure(2),ezplot(f2,[0,3]);hold on;
x1 = 0:0.1:3;
val2 = diff1_s(f2, x1);
plot(x1,val2)
legend('x^2','2x')

function val = diff1_s(f, x1)
    df = diff(f);   % symbolic math toolbox 
    val = double(vpa(subs(df,symvar(df),x1),4));
end

运行结果:
在这里插入图片描述
\qquad

  • Matlab的数值计算,可以采用“匿名函数”作为函数的参数。

\qquad 相应的数学运算(例如积分、微分),需要编写对应的数值算法,例如画出 f ( x ) = x 2 f(x)=x^2 f(x)=x2 [ 0 , 3 ] [0,3] [0,3] 上的微分值:

\qquad (1) 微分运算可以采用“中心差分”的公式,因此数值计算包含了计算误差

\qquad (2) 由于是数组运算,定义匿名函数时采用了“点乘”的方式,配合数值运算的需要

% numerical
x1 = 0:0.1:3;
f1 = @(x)(x.^2)
figure(1)
plot(x1,f1(x1));hold on;
val1 = diff1_c(f1,x1,0.1);
plot(x1,val1);
legend('x^2','2x')

function val = diff1_c(f,x,h)
    val = (f(x+h)-f(x-h))/(2*h);
end

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值