Matlab:非线性热传导(抛物方程)问题


函数文件1:real_fun.m
function f=real_fun(x0,t0)
%精确解
f=4*x0*(1-x0)*sin(t0);
函数文件2:F.m
function f=F(N,u,U,t,h1,h2)
%非线性方程组
%h1是x的步长,h2是t的步长
%u表示迭代节点,上一时刻的数值解
%h表示时间节点上的步长
%N表示空间节点的步数
a0=0.5*t^4*h2*N^2;
f(1,1)=a0*(U(2)^2-2*U(1)^2)+h2*fi(h1,t)+u(1)-U(1);
f(N-1,1)=a0*(-2*U(N-1)^2+U(N-2)^2)+h2*fi((N-1)*h1,t)+u(N-1)-U(N-1);
for p=2:N-2
f(p,1)=a0*(U(p+1)^2-2*U(p)^2+U(p-1)^2)+h2*fi(p*h1,t)+u(p)-U(p);
end
函数文件3:fi.m
function f=fi(x0,t0)
%等式右边的f函数
f=4*x0*(1-x0)*cos(t0)-16*t0^4*(6*x0^2-6*x0+1)*(sin(t0))^2;
函数文件4:Jacobian.m
function g=Jacobian(n,u,t,h1,h2)
%计算每个时间节点的牛顿迭代过程中的雅可比矩阵
%u表示迭代初值,上一时刻的数值解作为迭代初值
a=0.5*t^4*h2*n^2;
g=zeros(n-1);
g(1,2)=2*a*u(2);
g(1,1)=-4*a*u(1);
g(n-1,n-1)=-4*a*u(n-1);
g(n-1,n-2)=2*a*u(n-2);
for p=2:n-2
g(p,p+1)=2*a*u(p+1);
g(p,p)=-4*a*u(p);
g(p,p-1)=2*a*u(p-1);
end
g=g-eye(n-1);
函数文件5:Newtond.m
function x=Newtond(n,u,t,h1,h2)
%使用修改后的牛顿迭代,可以不求雅可比de逆
%U中间代初值
%u起始迭代初值
U=u;
tol=0.5e-5;
% Jacobi=Jacobian(n,u,t,h1,h2);%每隔k步求一次雅可比
x1=U-Jacobian(n,u,t,h1,h2)\F(n,u,U,t,h1,h2);
while (norm(x1-U,1)>=tol)
%数值解的1范数是否在误差范围内
U=x1;
x1=U-Jacobian(n,u,t,h1,h2)\F(n,u,U,t,h1,h2);
end
x=x1;%不动点
脚本文件:
tic;
clc
clear
N=100;
M=1000;
t_h=1/M;%t的步长
x_h=1/N;%x的步长
x=0:x_h:1;%x的节点
ti=0:t_h:0.5;%t的节点
%********************真解**************************
for i=1:length(x)
for j=1:length(ti)
real_Z(i,j)=real_fun(x(i),ti(j));
end
end
%********************真解**************************
%********************数值解**************************
ui=zeros(length(x)-2,1);%牛顿迭代初值
Z=zeros(length(x),length(ti));
for i=1:length(ti)-1
Z(2:length(x)-1,i+1)=Newtond(length(x)-1,ui,ti(i+1),x_h,t_h);%t(i+1)时间的牛顿数值解
ui=Z(2:length(x)-1,i+1);%牛顿迭代初值,上一时刻的数值解作为迭代初值
end %********************数值解**************************
[X,Y]=meshgrid(x,ti);
subplot(2,2,1),
mesh(X,Y,real_Z');
xlabel('x');ylabel('t');zlabel('u');title('analytical solution');
subplot(2,2,2),
mesh(X,Y,Z');
xlabel('x');ylabel('t');zlabel('u');title('numerical solution');
subplot(2,2,3),
mesh(X,Y,real_Z'-Z');
xlabel('x');ylabel('t');zlabel('u');title('error solution');
title('牛顿迭代法');
grid on;
toc;
效果图:

Matlab:非线性热传导(抛物方程)问题的更多相关文章
- Matlab:线性热传导(抛物线方程)问题
函数文件1:real_fun.m function f=real_fun(x0,t0) f=(x0-x0^2)*exp(-t0); 函数文件2:fun.m function f=fun(x0,t0) ...
- MATLAB 符号变量表达式 + 方程求解
源代码见文末 部分源代码: % 符号变量 两种表达方式 a=sym('a'); class(a); syms b; b; % 符号常量 c=sym('); c; % 符号表达式 三种表达方式 f1=' ...
- Matlab:非线性高阶常微分方程的几种解法
一.隐式Euler: 函数文件1: function b=F(t,x0,u,h) b(,)=x0()-h*x0()-u(); b(,)=x0()+*h*x0()/t+*h*(*exp(x0())+ex ...
- hdu3483 A Very Simple Problem 非线性递推方程2 矩阵快速幂
题目传送门 题目描述:给出n,x,mod.求s[n]. s[n]=s[n-1]+(x^n)*(n^x)%mod; 思路:这道题是hdu5950的进阶版.大家可以看这篇博客hdu5950题解. 由于n很 ...
- matlab 万能实用的非线性曲线拟合方法
——转载网络 在科学计算和工程应用中,经常会遇到需要拟合一系列的离散数据,最近找了很多相关的文章方法,在这里进行总结一下其中最完整.几乎能解决所有离散参数非线性拟合的方法 第一步:得到散点数据 根据你 ...
- PDE工具箱的简单使用
转载自Here matlab的PDE工具箱的简单使用 问题选择 边界条件选择 菜单按钮和简单使用 命令行输入pdetool,打开GUI编辑界面如下: 注意到工具栏上,就是我们要用到的,从左到右依次使用 ...
- Python数据预处理—归一化,标准化,正则化
关于数据预处理的几个概念 归一化 (Normalization): 属性缩放到一个指定的最大和最小值(通常是1-0)之间,这可以通过preprocessing.MinMaxScaler类实现. 常用的 ...
- Scipy-数值计算库
Scipy在Numpy的基础上则加了众多的数学计算,科学计算以及工程计算中常用的模块,例如线性代数,常微分方程的数值求解,信号处理,图像处理,系数矩阵等.在本章中,将通过实例介绍Scipy中常用的的一 ...
- Python数据预处理(sklearn.preprocessing)—归一化(MinMaxScaler),标准化(StandardScaler),正则化(Normalizer, normalize)
关于数据预处理的几个概念 归一化 (Normalization): 属性缩放到一个指定的最大和最小值(通常是1-0)之间,这可以通过preprocessing.MinMaxScaler类实现. 常 ...
随机推荐
- nginx 配置静态文件
location /temp/ { root F:/; autoindex on; } F:\temp 下的目录文件. 例子:http://localhost/temp/nginx-1.12.2/ht ...
- arm中断体系结构
ARM处理器中有7种类型的异常,按优先级从高到低的排列如下: 复位异常(Reset). 数据异常(Data Abort). 快速中断异常(FIQ) ...
- GET和POST中文乱码的解决方法
如果表单中含有中文,采用GET或者POST提交请求时,getParameter()方法接收到的参数值乱码. 1.乱码产生的原因 请求参数通过浏览器发送给Tomcat服务器,浏览器发送编码,但是tomc ...
- 17秋 SDN课程 第一次上机作业
第一题 拓扑: 测试连通性: 第二题 拓扑: 测试连通性: 第三题 拓扑: 测试连通性:
- 函数指针-如何理解typedef void (*pfun)(void)
问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...
- [从零开始搭网站六]为域名申请免费SSL证书(https),并为Tomcat配置https域名所用的多SSL证书
点击下面连接查看从零开始搭网站全系列 从零开始搭网站 由于国内的网络环境比较恶劣,运营商流量劫持的情况比较严重,一般表现为别人打开你的网站的时候会弹一些莫名其妙的广告...更过分的会跳转至别的网站. ...
- 转一个集成速锐的ss 回头试试 补充加速一、Vultr安装锐速
https://liyuans.com/archives/ssr-serverspeeder-onekey.html Debian/Ubuntu 系统 ShadowsocksR 一键安装脚本 (集成锐 ...
- 【UOJ】#273. 【清华集训2016】你的生命已如风中残烛
题目链接:http://uoj.ac/problem/273 $${Ans=\frac{\prod _{i=1}^{m}i}{w-n+1}}$$ #include<iostream> #i ...
- nodejs项目安装ant design
1.确保安装好nodejs $ node --version v10.4.1 2.确保npm $ npm -v 6.1.0 3.安装 $ sudo npm install antd-init -g / ...
- SpringBoot整合Graylog3.0
Graylog简介 Graylog是一个开源的完整的日志管理工具,功能和ELK类似,安装部署更方便. 官方网站 https://www.graylog.org 搭建 使用docker快速搭建 参考 h ...