[整理]matlab16常用计算方法.

  • 格式:doc
  • 大小:230.50 KB
  • 文档页数:10

下载文档原格式

  / 10
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常用计算方法

1.超越方程的求解

一超越方程为

x (2ln x – 3) -100 = 0

求超越方程的解。

[算法]方法一:用迭代算法。将方程改为

01002ln()3

x x =- 其中x 0是一个初始值,由此计算终值x 。取最大误差为e = 10-4,当| x - x 0| > e 时,就用x 的值换成x 0的值,重新进行计算;否则| x - x 0| < e 为止。

[程序]P1_1abs.m 如下。

%超越方程的迭代算法

clear %清除变量

x0=30; %初始值

xx=[]; %空向量

while 1 %无限循环

x=100/(2*log(x0)-3); %迭代运算

xx=[xx,x]; %连接结果

if length(xx)>1000,break ,end %如果项数太多则退出循环(暗示发散) if abs(x0-x)<1e-4,break ,end %当精度足够高时退出循环

x0=x; %替换初值

end %结束循环

figure %创建图形窗口

plot(xx,'.-','LineWidth',2,'MarkerSize',12)%画迭代线'.-'表示每个点用.来表示,再用线连接

grid on %加网格

fs=16; %字体大小

title('超越方程的迭代折线','fontsize',fs)%标题

xlabel('\itn','fontsize',fs) %x 标签

ylabel('\itx','fontsize',fs) %y 标签

text(length(xx),xx(end),num2str(xx(end)),'fontsize',fs)%显示结果

[图示]用下标作为自变量画迭代的折线。如P0_20_1图所示,当最大误差为10-4时,需要迭代19次才能达到精度,超越方程的解为27.539。

[算法]方法二:用求零函数和求解函数。将方程改为函数

100()2ln()3f x x x

=-- MATLAB 求零函数为fzero ,fzero 函数的格式之一是

x = fzero(f,x0)

其中,f 表示求解的函数文件,x0是估计值。fzero 函数的格式之二是

x = fzero(f,[x1,x2])

其中,x1和x2表示零点的范围。

另外MATLAB还有求解函数solve,计算非线性方程和方程组的符号解。

[程序]P1_2fzero.m如下。

%超越方程的求法

clear %清除变量

x=10:0.1:100; %自变量向量

f=inline('2*log(x)-3-100./x') %定义内线函数用的是字符窜

figure %创建图形窗口

plot(x,f(x),'LineWidth',2) %画曲线

grid on%加网格

x0=fzero(f,[20,30]); %求方程的零点

%x0=fzero(f,20); %求方程的零点

hold on%保持图像

plot(x0,f(x0),'.') %画零点

title('超越方程的解','fontsize',16) %标题

xlabel('\itx','fontsize',16) %x标签

ylabel('\itf','fontsize',16) %y标签

text(x0,0,num2str(x0),'fontsize',16) %标记零点

x0=solve('2*log(x)-3-100./x') %求超越方程的符号解

plot(double(x0),0,'o') %再画零点(double是把字符转化成数字)

P1_1图 P1_2图

2.导数的计算

正弦函数y= sin x的导数是余弦函数y'= cos x,余弦函数的导数是负的正弦函数,用MATLAB的数值导数和符号导数求正弦函数的一阶和二阶导数,并与其解析解进行比较。

[程序]P2diff.m如下。

%正弦函数导数的计算方法

clear %清除变量

dx=0.01*2*pi; %间隔

x=0:dx:2*pi; %自变量向量

y=sin(x); %原函数

f1=diff(y)/dx; %通过差分求导数

f1=[f1(1),(f1(1:end-1)+f1(2:end))/2,f1(end)];%求平均值

figure %创建图形窗口

plot(x,cos(x),x,f1,'.') %画一阶导数和数值差分曲线

%plot(x,cos(x),x(1:end-1),f1,'.') %数值导数(点)偏左

%plot(x,cos(x),x(2:end),f1,'.') %数值导数(点)偏右

syms sx %定义符号变量

y=sin(sx); %建立符号函数

dy_dx=diff(y); %求符号导数

df1=subs(dy_dx,sx,x); %符号替换数值

hold on %保持图像

plot(x,df1,'ro') %画符号导数曲线

grid on %加网格

legend('解析导数','数值差分','符号导数',4)%图例

title('正弦函数的一阶导数','FontSize',16)%加标题

f2=diff(f1)/dx; %通过差分求导数

f2=[f2(1),(f2(1:end-1)+f2(2:end))/2,f2(end)];%求平均值

d2y_dx2=diff(y,2); %求二阶符号导数

df2=subs(d2y_dx2,sx,x); %符号替换数值

figure %创建图形窗口

plot(x,-sin(x),x,f2,'.',x,df2,'o') %画二阶导数和差分以及符号导数曲线

grid on %加网格

legend('解析导数','数值差分','符号导数',4)%图例

title('正弦函数的二阶导数','FontSize',16)%加标题

[图示](1)如P2a 图所示,正弦函数的一阶导数的数值解(点)与解析解(线)符合得很好。

(2)如P2b 图所示,正弦函数的二阶导数的数值解(点)和符号解(圈)与解析解(线)符合得很好,不过二阶数值导数在端点与精确值有一点偏离。

P2a 图 P2b 图

3.积分的计算

求证:函数y = e ax sin bx 的积分为

221e (sin cos )ax S a bx b bx C a b

=-++ 其中a = -0.5,b = 2。积分下限为0。上限为x ,画出定积分的函数曲线。

[证明]利用分部积分得