函数文件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:非线性热传导(抛物方程)问题的更多相关文章

  1. 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) ...

  2. MATLAB 符号变量表达式 + 方程求解

    源代码见文末 部分源代码: % 符号变量 两种表达方式 a=sym('a'); class(a); syms b; b; % 符号常量 c=sym('); c; % 符号表达式 三种表达方式 f1=' ...

  3. Matlab:非线性高阶常微分方程的几种解法

    一.隐式Euler: 函数文件1: function b=F(t,x0,u,h) b(,)=x0()-h*x0()-u(); b(,)=x0()+*h*x0()/t+*h*(*exp(x0())+ex ...

  4. hdu3483 A Very Simple Problem 非线性递推方程2 矩阵快速幂

    题目传送门 题目描述:给出n,x,mod.求s[n]. s[n]=s[n-1]+(x^n)*(n^x)%mod; 思路:这道题是hdu5950的进阶版.大家可以看这篇博客hdu5950题解. 由于n很 ...

  5. matlab 万能实用的非线性曲线拟合方法

    ——转载网络 在科学计算和工程应用中,经常会遇到需要拟合一系列的离散数据,最近找了很多相关的文章方法,在这里进行总结一下其中最完整.几乎能解决所有离散参数非线性拟合的方法 第一步:得到散点数据 根据你 ...

  6. PDE工具箱的简单使用

    转载自Here matlab的PDE工具箱的简单使用 问题选择 边界条件选择 菜单按钮和简单使用 命令行输入pdetool,打开GUI编辑界面如下: 注意到工具栏上,就是我们要用到的,从左到右依次使用 ...

  7. Python数据预处理—归一化,标准化,正则化

    关于数据预处理的几个概念 归一化 (Normalization): 属性缩放到一个指定的最大和最小值(通常是1-0)之间,这可以通过preprocessing.MinMaxScaler类实现. 常用的 ...

  8. Scipy-数值计算库

    Scipy在Numpy的基础上则加了众多的数学计算,科学计算以及工程计算中常用的模块,例如线性代数,常微分方程的数值求解,信号处理,图像处理,系数矩阵等.在本章中,将通过实例介绍Scipy中常用的的一 ...

  9. Python数据预处理(sklearn.preprocessing)—归一化(MinMaxScaler),标准化(StandardScaler),正则化(Normalizer, normalize)

      关于数据预处理的几个概念 归一化 (Normalization): 属性缩放到一个指定的最大和最小值(通常是1-0)之间,这可以通过preprocessing.MinMaxScaler类实现. 常 ...

随机推荐

  1. Spring Boot 2 入门

    Spring Boot其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 参考网上资料,一路踩了几个坑,终于搞出了 ...

  2. dataTable表头未对其解决方法

    本文为博主原创,未经允许不得转载: 在tab页中使用dataTable时,默认显示的dataTable表头与数据显示正常,另一个的datatable则表头与数据未对其. 检查元素发现,datatabl ...

  3. Codeforces Round #107 (Div. 1) B. Quantity of Strings(推算)

    http://codeforces.com/problemset/problem/150/B 题意: 给出n,m,k,n表示字符串的长度为n,m表示字符种类个数,k表示每k个数都必须是回文串,求满足要 ...

  4. 【Mysql】【Navicat For Mac】Navicat Premium for Mac v12.0.23 + macOS Sierra 10.12.6

    参考地址:https://blog.csdn.net/womeng2009/article/details/79700667 [备注]我只用到了部分信息,就激活了 内容: Navicat Premiu ...

  5. 用html+css+js实现选项卡切换效果

    文章转载自:http://tongling.github.io/JSCards/ 用html+css+js实现选项卡切换效果 使用之前学过的综合知识,实现一个新闻门户网站上的常见选项卡效果: 文字素材 ...

  6. java中\r与\n的区别

    \r : return 到当前行的最左边. \n: newline 向下移动一行,并不移动左右. Linux中\n表示回车+换行: Windows中\r\n表示回车+换行. 测试了一下,在java,w ...

  7. Cordova+Vue快速搭建Hybrid App

    前言 最近项目迭代需要开发一个app,由于项目组其他系统前端技术栈都是Vue,所以自己在需求评估的时候就初步敲定了Cordova+Vue的前端架构,后来查阅了不少资料,也掉了不少坑,这里总结一下,也算 ...

  8. Codeforces 1009 F - Dominant Indices

    F - Dominant Indices 思路:树上启发式合并 先跑轻子树,然后清除轻子树的信息 最后跑重子树,不清除信息 然后再跑一遍轻子树,重新加回轻子树的信息 由于一个节点到根节点最多有logn ...

  9. Java访问Redis

    Redis的数据类型总共有如下几种 1.String(字符串) 2.List(列表),字符串列表,有序 3.Hash(哈希),可以存储类似于数据库的表结构 4.Set(集合),无序,不可重复 5.ZS ...

  10. C#模拟HTTP请求并发送二进制

    public static String Submit(String methodName) { string postData = "this is post data";//请 ...