实验7 - 幂法&反幂法&微分方程求解(ode函数)

  1. 用反幂法求解下列矩阵的最大特征值以及对应的特征向量,精确到6位数字:
%% invpower.m
%反幂法,精确到6位小数
%A = [6 2 1; 2 3 1; 1 1 1];
function [s,y] = invpower(A, x0, eps, n)
% s为按模最小特征值,y是对应特征向量
k=1;
r=0;
%r相当于λ0
y=x0./max(abs(x0)); %规范化初始向量
[L,U]=lu(A);
z=L\y;
x=U\z;
u=max(x);
s=1/u; % 按模最小为A的逆按模最大的倒数
if abs(u-r)<eps %判断第一次迭代后是否满足终止条件
    return
end
while abs(u-r)>eps && k<n %终止条件
    k=k+1;
    r=u;
    y=x./max(abs(x));
    z=L\y;
    x=U\z;
    u=max(x);
end
[m,index]=max(abs(x)); %这两部保证取出的按模最大特征值
s=1/x(index); %是原值而非绝对值
end


%% test1.m
A = [6 2 1; 2 3 1; 1 1 1];
x0 = [1;1;1];
eps = 1e-6;
n=30;
[s,y]=invpower(A, x0, eps, n);

运行结果

>> test1
>> s

s =

    0.5789

>> y

y =

   -0.0461
   -0.3749
    1.0000

>> eig(A)

ans =

    0.5789
    2.1331
    7.2880

>> A*y-s*y

ans =

   1.0e-06 *

   -0.5408
    0.9292
    0.2269

  1. 分别用幂法求下列矩阵的主特征值,反幂法求下列矩阵的模最小特征值,eig函数求全部特征值和特征向量:
%% 幂法
% mipower.m

function [t,y]=mipower(A,x0,eps,n) 
% t为所求特征值,y是对应特征向量
k=1;
z=0; %z相当于λ0
y=x0./max(abs(x0)); %规范化初始向量
x=A*y; %迭代格式
b=max(x); %b相当于β
if abs(z-b)<eps %判断第一次迭代后是否满足要求
    t=max(x);
    return;
end
while abs(z-b)>eps && k<n
    k=k+1;
    z=b;
    y=x./max(abs(x));
    x=A*y;
    b=max(x);
end
[m,index]=max(abs(x));
t=x(index);
end
%% invpower.m
%反幂法,精确到6位小数
%A = [6 2 1; 2 3 1; 1 1 1];
function [s,y] = invpower(A, x0, eps, n)
% s为按模最小特征值,y是对应特征向量
k=1;
r=0;
%r相当于λ0
y=x0./max(abs(x0)); %规范化初始向量
[L,U]=lu(A);
z=L\y;
x=U\z;
u=max(x);
s=1/u; % 按模最小为A的逆按模最大的倒数
if abs(u-r)<eps %判断第一次迭代后是否满足终止条件
    return
end
while abs(u-r)>eps && k<n %终止条件
    k=k+1;
    r=u;
    y=x./max(abs(x));
    z=L\y;
    x=U\z;
    u=max(x);
end
[m,index]=max(abs(x)); %这两部保证取出的按模最大特征值
s=1/x(index); %是原值而非绝对值
end
% test2.m
clear;
clc;
%% 初始化
% 矩阵B,C
B = [2 3 2 3;
    3 3 2 -1;
    2 2 4 4 ;
    3 -1 4 4];

C = [4 -1 0 0 0 0;
    -1 4 -1 0 0 0;
    0 -1 4 -1 0 0;
    0 0 -1 4 -1 0;
    0 0 0 -1 4 -1;
    0 0 0 0 -1 4];
% 变量
x1 = [1;1;1;1];
x2 = [1;1;1;1;1;1];
eps = 1e-6;
n=50;

%% 幂法 mipower.m
% 主特征值
[s1,y1]=mipower(B, x1, eps, n);
[s2,y2]=mipower(C, x2, eps, n);
disp('矩阵B主特征值:');
s1
disp('矩阵C主特征值:');
s2
%% 反幂法 invpower.m
% 最小特征值
[s3,y3]=invpower(B, x1, eps, n);
[s4,y4]=invpower(C, x2, eps, n);
disp('矩阵B最小特征值:');
s3
disp('矩阵C最小特征值:');
s4
%% eig函数
% 全部特征值和特征向量
% E=eig(A):求矩阵A的全部特征值,构成向量E
res1 = eig(B);
res2 = eig(C);
% 直接求矩阵B的特征值和特征向量
[v1,d1] = eig(B,'nobalance');
[v2,d2] = eig(C,'nobalance');
disp('矩阵B的特征值');
v1
disp('矩阵B的特征向量');
d1
disp('矩阵C的特征值');
v2
disp('矩阵C的特征向量');
d2

运行结果

矩阵B主特征值:

s1 =

   10.1930

矩阵C主特征值:

s2 =

   -5.2470

矩阵B最小特征值:

s3 =

   -0.8042

矩阵C最小特征值:

s4 =

    2.1981

矩阵B的特征值

v1 =

   -0.5709    0.6249    0.2618    0.4636
    0.5269   -0.0637    0.7986    0.2838
   -0.3203   -0.7201   -0.0637    0.6122
    0.5421    0.2947   -0.5381    0.5742

矩阵B的特征向量

d1 =

   -2.4951         0         0         0
         0    0.8042         0         0
         0         0    4.4979         0
         0         0         0   10.1930

矩阵C的特征值

v2 =

    0.2319   -0.4179   -0.5211   -0.5211   -0.4179    0.2319
    0.4179   -0.5211   -0.2319    0.2319    0.5211   -0.4179
    0.5211   -0.2319    0.4179    0.4179   -0.2319    0.5211
    0.5211    0.2319    0.4179   -0.4179   -0.2319   -0.5211
    0.4179    0.5211   -0.2319   -0.2319    0.5211    0.4179
    0.2319    0.4179   -0.5211    0.5211   -0.4179   -0.2319

矩阵C的特征向量

d2 =

    2.1981         0         0         0         0         0
         0    2.7530         0         0         0         0
         0         0    3.5550         0         0         0
         0         0         0    4.4450         0         0
         0         0         0         0    5.2470         0
         0         0         0         0         0    5.8019

>> 
  • 用法介绍
    常微分方程数值求解的命令:
    求常微分方程的数值解,MATLAB的命令格式为:
[t,y]=solver('odefun',tspan,y0,options)

其中solver选择ode45等函数名,odefun为根据待解方程或方程组编写的m文件名,tspan为自变量的区间[t0,tf],即准备在那个区间上求解,y0表示初始值,options用于设定误差限制。
命令格式为:

options=odeset('reltol',rt,'abstol',at)

rt输入相对误差,at输入绝对误差。
常用的函数:

函数名 简介 适用对象
ode45 单步,4/5阶龙格库塔法 大部分ODE
ode23 单步,2/3阶龙格库塔法 快速、精度不高的求解
ode113 多步,Adams算法 误差要求严格或计算复杂
  • ode23 解非刚性微分方程,低精度,使用Runge-Kutta法的二三阶算法。
  • ode45 解非刚性微分方程,中等精度,使用Runge-Kutta法的四五阶算法。
  • ode113 解非刚性微分方程,变精度变阶次Adams-Bashforth-Moulton PECE算法。
  1. 用ode23函数、ode45函数和ode113函数求解下列微分方程并画图比较:【未运行。。。错了不背锅!】
  1. y'=x+y,y(0)=1, 0<x<3;
  2. y'=y-2t/y, y(0)=1, 0<t<4;

解:

% dfun1.m
function f1=dfun1(x,y)
f1=x+y;
end

% dfun2.m
function f2=dfun2(t,y)
f2=y-2t./y;
end
% test3.m
%% ode23
[x,y]=ode23(@dfun1,[0 3],1);
[t,y]=ode23(@dfun2,[0 4],1);
plot(x,y);
plot(t,y);

%% ode45
% 调用语句
%[T,Y] = ode45( @odefun, tspan, y0 );
[x,y]=ode45(@dfun1,[0 3],1);
[t,y]=ode45(@dfun2,[0 4],1);
% 绘图
plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')
legend('x','y','z')

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

推荐阅读更多精彩内容

  • 考试科目:高等数学、线性代数、概率论与数理统计 考试形式和试卷结构 一、试卷满分及考试时间 试卷满分为150分,考...
    Saudade_lh阅读 1,073评论 0 0
  • matlab命令 声明:本文转自:https://www.douban.com/note/136332003/ 侵...
    我就是个初学者阅读 13,698评论 0 44
  • 老闹说,她有个同事觉得自己女朋友好烦,一点点小事很作。要是她,她才不会这样。 听了,忽然有种被打脸的感觉,因为我也...
    艾书匣子阅读 166评论 0 0
  • 哈喽,大家好 来北京除了玩就是吃吃吃,烤鸭又是排在头一号,然而动辄排队一小时、两小时,甚至还有仨小时,既心焦又浪费...
    齐齐齐齐齐落阅读 326评论 0 0
  • 人切不可操之过急,不然容易出问题。真理之言,有了教训才能更深刻体会此句话之含义。 每每总是在知道自...
    幽幽白书0阅读 235评论 0 1