非线性方程求解、幂法

实验六

test1

  1. 利用roots函数求解非线性方程:
    解:
%roots函数
%f(x) = x^3-6*x^2-72*x-27
p = [1, -6, -72, -27];
res = roots(p);
res

运行结果
>> test1

res =
   12.1229
   -5.7345
   -0.3884

fzero函数样例运行测试

样例:
%但fzero函数只给出离x0最近的那个根。
%z=fzero('fname',x0,tol,trace)
%画出函数图像,对该函数有个大概的印象
t=-10:0.01:10;
y=sin(t).^2.*exp(-0.1*t)-0.5*abs(t);
plot(t,y)
hold on
plot([-10 10],[0 0],'k');
%从图像我们可以看出大概在x=[-2-1 0 1 2]附近的某个值时,y为零。下面我们就用fzero来具体求出零点。
f=@(t)sin(t).^2.*exp(-0.1*t)-0.5*abs(t)
%第一种方法使用arrayfun
x=[-2 -1 0 1 2];
%arrayfun(@(x)fzero(f,x),x)
%第二种方法,分别带入
[x1 y]=fzero(f,-2)
[x2,y]=fzero(f,-1)
[x3,y]=fzero(f,0)
[x4,y]=fzero(f,1)
[x5,y]=fzero(f,2)
arrayfun(@(x)fzero(f,x),x)

运行结果:
>>test2

f =

  包含以下值的 function_handle:

    @(t)sin(t).^2.*exp(-0.1*t)-0.5*abs(t)


x1 =

   -2.0074


y =

   2.2204e-16


x2 =

   -0.5198


y =

  -5.5511e-17


x3 =

     0


y =

     0


x4 =

    0.5993


y =

     0


x5 =

    1.6738


y =

   2.2204e-16


ans =

   -2.0074   -0.5198         0    0.5993    1.6738
test2运行结果图
  1. 画出以下非线性函数,利用fzero函数求解零点:
    解:
    test2_1
clear; 
%单根求解
x=-20:0.01:20;
y=x.^7+2*x.^5+1;
plot(x,y)
hold on
plot([-20 20],[0 0],'k');
f=@(x)x^7+2*x^5+1;
res = fzero(f,-0.8);
res
%%%%%%%%%%%%
>> test2_1

res =

  -0.8214

运行结果图1


001.jpg

test2_2

clear; 

%多重根求解
a=0.15;
b=0.5;
t=-20:0.01:20;
y = cos(t).^3.*exp(-2*a*t)-b*abs(t);
plot(t,y)
hold on
plot([-20 20],[0 0],'k');
f=@(t)cos(t).^3.*exp(-2*a*t)-b*abs(t);
res = fzero(f,-0.8);
res
%%%%%%%%%

>> test2_2

res =

   -0.8177

运行结果2


002.jpg

二分法


test2.JPG

多重根求解


test2_2.jpg

fzero不能获得多项式的多重根,尤其是复数根;而roots函数求解可以获得所有根。

fzero求解方程x2.*exp(-x2)=0.2在区间[-2,2]的根?

fzero(@(x)x.^2.*exp(-x.^2)-0.2,0)

https://blog.csdn.net/lqhbupt/article/details/18009015

样例:


>> syms x
>> solve(x^7+2*x^5+1)
ans =
-0.82138342524233730783180723576101
- 0.3533142445050346017251168917277 - 0.84803943068664341373324461904684*i
- 0.3533142445050346017251168917277 + 0.84803943068664341373324461904684*i
0.057709544218893076591497097925659 + 1.4272619559849694123531714767915*i
0.057709544218893076591497097925659 - 1.4272619559849694123531714767915*i
0.70629641290731017904952341168255 - 0.45618391946658911016799825085068*i
0.70629641290731017904952341168255 + 0.45618391946658911016799825085068*i
%%说明:有一个实根
>> f=@(x)x^7+2*x^5+1;fzero(f,-0.8)
ans =
-0.821383425242337
4.JPG
  1. 利用fsolve函数求解非线性方程组:
    解:
function q=myfun(p)
x=p(1);
y=p(2);
q(1)=2*x^3-y-exp(-x);
q(2)=-x+2*y-exp(-y);
end
%初始值设置x0=1;y0=1;
%%%%%%%%%%%运行结果
>> x=fsolve('myfun',[1,1],optimset('Display','off'));
>> x

x =

    0.8211    0.6671
  1. 利用二分法求解非线性方程并画图检验。
    解:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%函数erfen.m
function [k, x, wuca, yx]=erfen(a, b, abtol)
a(1)=a;
b(1)=b;
ya=fun(a(1));
yb=fun(b(1));
if ya*yb > 0,
    disp('please reset a and b!'),return
end
max1=-1+ceil((log(b-a) - log(abtol))/log(2));
%ceil是向正无穷方向取整; abtol是误差;
for k=1:max+1
    a;
    ya=fun(a);
    b;
    yb=fun(b);
    x=(a+b)/2;
    yx=fun(x);
    wuca=abs(b-a)/2;
    k = k-1;
    [k,a,b,x,wuca,ya,yb,yx];
    if yx==0
        a = x;
        b = x;
    elseif yx==0
        a=x;
        b=x;
    elseif yb*yx>0
        b=x;
        yb=yx;
    else
        a=x;
        ya=yx;
    end
    k=max1;
    x;
    wuca;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%test4
clear;
%function [k, x, wuca, yx]=erfen(a, b, abtol)
x=-10:0.01:10;   
%x=-2:0.01:4;  
y=(x-1).^3-3*x+2;
%作图
plot(x, y);
%鼠标基准线显示+网格+有报错但能运行
grid,gtext('y=(x-1).^3-3*x+2');

%%%%%%%%%%%%运行结果%%%%%%%%%
函数图像【10:10】
看起来只有一个解


004.jpg

将区间缩小到【-2:4】


004_1.jpg

可以看到,有三个根

%%亲测此代码有毒!!!代码不可用
clear;
%function [k, x, wuca, yx]=erfen(a, b, abtol)
%x=-10:0.01:10;   

x_up =2;
x_down = 3;
error = 0.001;
res_down =(x_down-1).^3-3*x_down+2; 
res_up = (x_up-1).^3-3*x_up+2;

while(res_down * res_up < 0)
        x = 0.5*(x_up + x_down);
        res = x^3 - x - 1;
        
        if( res*res_down < 0 )
                x_up = x;
        else
                x_down = x;
        end

        if( abs(x_up-x_down) < error )
                break;
        end
end

%作图
%plot(x, y);
%鼠标基准线显示+网格
%grid,gtext('y=(x-1).^3-3*x+2');
result_x = 0.5*(x_up + x_down);
result_x
%%%%%%%%%%%%%%%%%%%%%%%%%%%
运行结果

result_x =
[-2, 0]
  -4.8828e-04

[0, 1]
result_x =

   4.8828e-04
[2, 3]
result_x =

    2.0005
%%亲测此代码有毒!!!代码不可用
  1. 用简单迭代法求非线性方程的根 ,取初值,迭代20次,比较观察以下两种迭代格式的结果。

  2. 用牛顿法求解非线性方程的根,取以下不同初值,迭代20次。比较观察结果。

  3. 用以下各种方法求非线性方程的全部根:

1) 简单迭代法:

2) 牛顿法

3) 弦截法

4) Aitken加速法

5) 抛物线法

6) solve函数

取相同的迭代初始值,比较以上各方法的收敛速度

  1. 利用不动点迭代法求解非线性方程组(自定义初值):

  2. 利用牛顿迭代法求解非线性方程组,初值取(1,1):

  3. 用幂法求解下列矩阵的最大特征值以及对应的特征向量,精确到6位数字:
    解:

%由圆盘定理且三特征根所在圆盘都不独立,特征根区间为[-14,18]
%不妨设置x =[1,1,1]
format;
A = [-2 1 -2; 9 -2 7; 4 -1 3] %原矩阵
x = [1;1;1]%初始向量
r = 10^(-6)%误差限

m = [max(x)-1,max(x)]; 
%m1表示mk,m2表示mk+1

while abs(m(1)-m(2)) >= r
   x = A*x;
   m(1)=m(2);
   m(2)=max(abs(x));
   x = x./m(2);
end

disp('特征向量是')
x
disp('最大特征值')
value = m(2)
%%%%%%%%%%%%%%运行结果%%%%%%%%
 test10

A =

    -2     1    -2
     9    -2     7
     4    -1     3


x =

     1
     1
     1


r =

   1.0000e-06

特征向量是

x =

   -0.3975
    1.0000
    0.5394

最大特征值

value =

    1.8019
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容