Matlab-数值计算方法作业

数值计算方法Matlab练习题

姓名学号

侯永琪-B18021008

第一题

Matlab-数值计算方法作业

(1)二分法

求解结果

Matlab-数值计算方法作业

matlab程序(主函数dichotomy())

%二分法计算函数的零点
%输入求根区间a,b和求根精度abtol
%函数输出根的近似值,和迭代次数
function dichotomy()
a=input('请输入求根的下限,a=');
b=input('请输入求根的上限,b=');
abtol=input('请输入求根的精度,abtol=');
iterations=0;
ya=fun(a);yb=fun(b);%程序中调用的fun.m为函数
if ya*yb>0
    fprintf('注意:ya*yb>0,请重新调整区间端点a和b.'),return
else
    [iter,y]=dichotomyRoot(a,b,abtol,iterations);
    disp('Root='),disp(y);
end
disp('迭代次数='),disp(iter);
end

matlab程序(子函数dichotomyRoot())

%可以只运行某一个小函数(内层函数)
%使用二分法计算函数的零点
%参数a,b为根的大概区间,abtol为精度
function [iterations,y]=dichotomyRoot(a,b,abtol,counter)
x=(a+b)/2;
f3=fun(x);
f1=fun(a);
if(f1*f3<0)
    m=x-a;
    if(m>abtol)
        b=x;
        counter=counter+1;
        [counter,y]=dichotomyRoot(a,b,abtol,counter);
    else
        y=x;
    end
else
    m=b-x;
    if(m>abtol)
        a=x;
        counter=counter+1;
        [counter,y]=dichotomyRoot(a,b,abtol,counter);
    else
        y=x;
    end
end
iterations=counter;
end

matlab程序(子函数fun())

function y1=fun(x)
y1=exp(x)+10*x-2;

(2)简单迭代法

求解结果

Matlab-数值计算方法作业

主函数

clc
x0=0.5;
x1=fun(x0);
k = 1;
while(abs(x1-x0)>0.0005)
    x0=x1;
	x1=fun(x1);
    k = k +1;
end
disp('解题结束')
disp('简单迭代法所求根为')
disp(x1)
disp('迭代次数为')
disp(k)

子函数(fun())

function y1=fun(x)
y1=(2-exp(x))/10;

(3)牛顿迭代法

求解结果

Matlab-数值计算方法作业

主函数

x = input('x=');%开始迭代最初的x
eps = input('eps=');%定义所要求解的精度
syms x1;%定义两Xk+1和Xk的差,一次来限制精度的要求
x1=100;
syms xa;
xa=x;
k = 1;
syms xb;%记录上一个x和下一个x
while x1>eps
    xb = xa;
    xa = newton1(xb);
    x1 = abs(xa-xb);%得到▲x 
    k = k+1;
end
disp('该函数符合规定精度的解是:');
double(xa)
disp('迭代次数为:');
disp(k)
%xa即为所求的值

子函数1||2

function y = newton(x)
y = exp(x)+10*x-2;%任意函数
end
%function的自定义函数用来保存咱们要进行牛顿迭代的函数
function y = newton1(x)
syms a;
f = a - (newton(a)./diff(newton(a)));
y = subs(f,x);%牛顿迭代公式
end
%如果直接用y和x来实现的话,在掉用原函数的时候就算出了具体数值,公式中的求导就会变为0,
%无法求解,所以先用f,a来代替y和x,最后再进行替换,实现牛顿迭代公式。
上一篇:UI自动化安装app


下一篇:巩固知识体系!深入Java虚拟机第四版pdf