IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 求解第一类边值问题 源:matlab -> 正文阅读

[数据结构与算法]求解第一类边值问题 源:matlab

matlab爱好者。
求解第一类边值问题的四种方法(完整),包括相互的验证:
任何第一类边值问题都可以用这四种方法快速解决。矩阵法这里只能适用于5个离散点,想得到通解请自己推一遍矩阵法。
我们以一道例题开始:
题目:实例
解法:①初值解法解边值:通过给dy来求y(end),直到拟合。首先做一个函数,给一个dy,返回一个y(end)。
函数名为findf,
如下:
function s=findf(dy)
t=linspace(0,4,11);
dt=t(2)-t(1);
y(1)=0; v(1)=dy;
for i=1:length(t)-1
y(i+1)=y(i)+v(i)dt;
v(i+1)=v(i)+(2
v(i)cos(t(i))-y(i)sin(4t(i))-cos(3t(i)))dt;
end
s=y(end);
程序源代码:
clear
x=linspace(0,2,10);
for i=1:length(x)
ss(i)=findf(x(i));
end
plot(x,ss)
hold on;
o=linspace(0,2,10);
for j=1:length(o)
g(j)=2;
end
plot(o,g,’-’);
xlabel(‘dy’);
ylabel(‘y(end)’);
title(‘y(end)-dy’);
grid on;
legend(‘y(end)’,‘y(end)=2’);
得到结果:结果图再做一个图,就是每给定一个dy时候,y的图像:
源代码:
clear
k=linspace(0,4,100);
for l=1:length(k)
[y,t]=findf(k(l));
plot(t,y,’-’)
hold on;
end
hold on;
o=linspace(0,4,10);
for j=1:length(o)
g(j)=2;
end
plot(o,g,’-o’);
findf函数为:
function [y,t]=findf(dy)
t=linspace(0,4,11);
dt=t(2)-t(1); y(1)=0; v(1)=dy;
for i=1:length(t)-1
y(i+1)=y(i)+v(i)dt;
v(i+1)=v(i)+(2
v(i)cos(t(i))-y(i)sin(4t(i))-cos(3t(i)))dt;
end
结果图:结果图
②割线法源代码:
clear
t(1)=1;t(2)=2;i=2;
while abs(t(i)-t(i-1))>0.01 f(i)=findf(t(i))-2; f(i-1)=findf(t(i-1))-2; t(i+1)=t(i)-(f(i)
(t(i)-t(i-1)))/(f(i)-f(i-1)); i=i+1;
end
plot(t,’-o’)
findf函数为:
function s=findf(dy)
t=linspace(0,4,11);
dt=t(2)-t(1); y(1)=0; v(1)=dy;
for i=1:length(t)-1
y(i+1)=y(i)+v(i)dt;
v(i+1)=v(i)+(2
v(i)cos(t(i))-y(i)sin(4t(i))-cos(3t(i)))dt;
end
s=y(end);
结果:结果
左端导数值为0.35462。
用①方法来验证割线法结果是否正确,不要轻易相信结果,我们写个代码来验证一下:验证源代码:
clear
[y,t]=findf(0.35462);
plot(t,y,’-’);
hold on;
o=linspace(0,4,10);
for j=1:length(o)
g(j)=2;
end
plot(o,g,’-o’);
其中findf函数源代码:
function [y,t]=findf(dy)
t=linspace(0,4,11);
dt=t(2)-t(1);
y(1)=0; v(1)=dy;
for i=1:length(t)-1
y(i+1)=y(i)+v(i)dt;
v(i+1)=v(i)+(2
v(i)cos(t(i))-y(i)sin(4t(i))-cos(3t(i)))dt;
end
结果:结果图
发现在0.35462的结果下,最后一个值确实是2,故这个结果是没有问题的。注:如果要用这种方法计算右端导数,我们已经已知左端点导数值了,所以已经简化为初值问题,这里没必要再赘述。
③自洽法源代码:
clear
t=linspace(0,4,10);
dt=t(2)-t(1);
y=zeros(1,10);
y(1)=1;y(end)=2;delta=1;i=1;
while delta>0.01&&i<1000
g=y;
for i=2:length(t)-1
g(i)=0.5
(y(i+1)+y(i-1)-(dt^2)
(2
((y(i+1)-y(i-1))/(2dt))cos(t(i))-y(i)sin(4t(i))-cos(3t(i))));
end
delta=sum(abs(y-g)); y=g; i=i+1;
end
结果:结果
④矩阵法,将t离散化成5个点的案例。
源代码:
clear
p=[1 0 0 0 0;1+cos(1) -2+sin(4) 1-cos(1) 0 0;0 1+cos(2) -2+sin(8) 1-cos(2) 0;0 0 1+cos(3) -2+sin(12) 1-cos(3);0 0 0 0 1];
q=[1;-cos(3);-cos(6);-cos(9);2];
y=inv(p)q
结果:结果图
用自洽法来验证矩阵法的结果是否正确,不能简单以为这个结果就是正确的。所以我们来用自洽法来验证一下:
源代码:
clear
t=linspace(0,4,5);
dt=t(2)-t(1);
y=zeros(1,5);
y(1)=1;y(end)=2;delta=1;i=1;
while delta>0.01&&i<1000
g=y;
for i=2:length(t)-1
g(i)=0.5
(y(i+1)+y(i-1)-(dt^2)
(2*((y(i+1)-y(i-1))/(2*dt))cos(t(i))-y(i)sin(4t(i))-cos(3t(i))));
end
delta=sum(abs(y-g)); y=g; i=i+1;
end
结果:结果图
五个离散点的时候自洽法求得的结果和矩阵法一模一样。故矩阵法和自洽法互相验证
注:有一些matlab里面的乘号被屏蔽掉了,请自行添加,否则无法运行。
编者水平不高,若有错误,请评论区指正
谢谢。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-25 12:43:47  更:2021-10-25 12:44:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:23:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码