1. 常微分方程式
普通の境界線
t0 時間 ode45() の初期値は Runge-Kutta 法の 1 次であり、それ以上の次数は次のように同じであることが知られています。
s(1) = y 、s(2)=y'
s(3) = x 、s(4)=x'
//匿名函数 下为方程组 核心函数
s_chuzhi = [0;0;0;0]; //初值 分别两个位移和速度的初值
t0 = 0:0.2:180;
f = @(t,s)[s(2);(f*cos(w*t) - K1*s(2) - s(1)*rou*g*Aw - K2*(s(1) - s(3)) - K3*(s(2)-s(4)) ) / (m+namd);
s(4);( K2*(s(1)-s(3)) + K3*(s(2)-s(4)) ) / m1];
[t,s] = ode45(f,t0,s_chuzhi);
セグメント境界の非匿名関数
% 主函数
s_chuzhi = [0;0;0]; % 位移,速度,加速度的初值
t0 = 0:0.2:180;
[t,s] = ode45(@f1,t0,s_chuzhi);
% f1函数
% s(1) = s , s(2) =s' , s(3) = s''
function ds = (t,s)
ds = zeros(3,1); %有更高阶的可以初始化为 4,1 5,1 等等
%分段 可以是以函数值或自变量时间分段
if ...
s(1) = ... %s
s(2) = ... %s'
s(3) = ... %s'' 下同
else if ...
s(1) = ...
s(2) = ...
s(3) = ...
else ...
s(1) = ...
s(2) = ...
s(3) = ...
end
手書きで改良された ode45() 関数コード
function varargout=odes_rk4(odefun,xspan,y0,n)
% 经典四阶 Runge-Kutta 法求解微分方程组
if nargin<4
n=10; % 默认区间等分数为 10
end
w=length(y0); % 方程的维数
x=linspace(xspan(1),xspan(2),n+1); % 离散节点值
y=[y0(:),zeros(w,n)].'; % 存储微分方程的解向量
K=zeros(4,w); % 存储节点处的导数值
for k=1:n
l=x(k+1)-x(k); % 步长
K(1,:)=feval(odefun,x(k),y(k,:)); % 求 K1 的值
K(2,:)=feval(odefun,x(k)+l/2,y(k,:)+l/2*K(1,:)); % 求 K2 的值
K(3,:)=feval(odefun,x(k)+l/2,y(k,:)+l/2*K(2,:)); % 求 K3 的值
K(4,:)=feval(odefun,x(k)+l,y(k,:)+l*K(3,:)); % 求 K4 的值
y(k+1,:)=y(k,:)+l/6*[1,2,2,1]*K; % 经典四阶 Runge-Kutta 公式
end
[varargout{1:2}]=deal(x(:),... % 第一个输出参数为离散节点值
y); % 第二个输出参数为微分方程的解
複雑な境界値 (つまり、初期値と終了値がわかっている) の場合は、 bvp4c() 関数を使用します。
2. 偏微分方程式
1. pdepe() 関数の楕円放物線
支配方程式左境界右境界初期値
標準フォーマット
初期値の形式
境界値の標準形式: 左境界と右境界の 2 つの方程式
m = 0; % m 结合标准方程求出
x = [0 0.005 0.01 0.05 0.1 0.2 0.5 0.7 0.9 0.95 0.99 0.995 1];
t = [0 0.005 0.01 0.05 0.1 0.5 1 1.5 2];
sol = pdepe(m,@pdex4pde,@pdex4ic,@pdex4bc,x,t); %有三个函数
u1 = sol(:,:,1);
u2 = sol(:,:,2);
figure
surf(x,t,u1)
title('u1(x,t)')
xlabel('Distance x')
ylabel('Time t')
figure
surf(x,t,u2)
title('u2(x,t)')
xlabel('Distance x')
ylabel('Time t')
% --------------------------------------------------------------
function [c,f,s] = pdex4pde(x,t,u,DuDx) %函数一 结合标准方程格式(1)求程求 c,f,s
c = [1; 1];
f = [0.024; 0.17] .* DuDx;
y = u(1) - u(2);
F = exp(5.73*y)-exp(-11.47*y);
s = [-F; F];
% --------------------------------------------------------------
function u0 = pdex4ic(x); %函数二 方程初始值 即t=0时刻的值
u0 = [1; 0];
% --------------------------------------------------------------
function [pl,ql,pr,qr] = pdex4bc(xl,ul,xr,ur,t) %结合左边界标准格式(3)求p,q
pl = [0; ul(2)]; %结合右边界标准格式(3)求p,q
ql = [1; 0];
pr = [ur(1)-1; 0];
qr = [0; 1];
2. 1次元熱伝導方程式の解法
1.前方差分法
clc,clear;
a=1; %热传导方程中的
dx=0.02; %尽量大
x=0:dx:1;
dt=0.0001; %尽量小
t=0:dt:1;
%构造温度分布矩阵
u=zeros(length(x),length(t));
u(:,1)=sin(pi*x); %初始条件 可以改
m1=10+0.5*sin(t); %左边界条件 可以改 m1就是那个μ1 ,本子上记的
m2=10-0.5*sin(10*t); %右边界条件 可以改 m2就是那个μ2
%系数矩阵
A=-2*eye(length(x))+diag(ones(1,length(x)-1),1)+diag(ones(1,length(x)-1),-1);
for n=1:length(t)-1
u(:,n+1)=u(:,n)+(a^2*dt/dx^2)*A*u(:,n) ; %A是系数矩阵 a是热传导方程公式中的
%第一类边界条件的话
u(1,n+1)=m1(n+1); %单独计算每一行的左边界值
u(end,n+1)=m2(n+1); %单独计算每一行的右边界值
%第二类边界条件的话
%u(1,n+1)=u(2,n+1)-m1(n+1)*dx;
%u(end,n+1)=u(end-1,n+1)+m2(n+1)*dx;
%第三类边界条件的话
end
plot(x,u(:,end)); %画出最后一行
figure
[T,X]=meshgrid(t,x);
surf(X,T,u);
shading interp
%% 加热源 f
clc,clear;
a=1; %热传导方程中的
dx=0.02; %尽量大
x=0:dx:1;
dt=0.00001; %尽量小
t=0:dt:1;
%构造温度分布矩阵
u=zeros(length(x),length(t));
u(:,1)=0; %t=0初始条件 可以改
f=20*exp(-20*(x-1/2).^2); %热源
m1=0+0.0*sin(t); %左边界条件 可以改
m2=0-0.0*sin(10*t); %右边界条件 可以改
%系数矩阵
A=-2*eye(length(x))+diag(ones(1,length(x)-1),1)+diag(ones(1,length(x)-1),-1);
c=1;
for n=1:length(t)-1
u(:,n+1)=u(:,n)+(a^2/dx^2*A*u(:,n)+f')*dt ; %A是系数矩阵 a是热传导方程公式中的
%第一类边界条件的话
%u(1,n+1)=m1(n+1); %单独计算每一行的左边界值
%u(end,n+1)=m2(n+1); %单独计算每一行的右边界值
%第二类边界条件的话
%u(1,n+1)=u(2,n+1)-m1(n+1)*dx;
%u(end,n+1)=u(end-1,n+1)+m2(n+1)*dx;
%第三类边界条件的话
u(1,n+1)=(dx*m1(n+1)-c*u(2,n+1)) / (dx-c); % c为公式中的系数 具体看笔记
u(end,n+1)=(dx*m2(n+1)+c*u(end-1,n+1)) / (dx+c);
end
plot(x,u(:,end)); %画出最后一行
%axis([x(1) x(end) 0 1]);
figure
[T,X]=meshgrid(t,x);
surf(X,T,u);
shading interp
2. 後方差分法
% 向后差分法 无热源
clc,clear;
a=1; %热传导方程中的
dx=0.02; %尽量大
x=0:dx:1;
dt=0.0001; %尽量小
t=0:dt:1;
%构造温度分布矩阵
u=zeros(length(x),length(t));
u(:,1)=sin(x); %初始条件 可以改
m1=10+0.1*sin(t); %左边界条件 可以改 m1就是那个μ1 ,本子上记的
m2=0+0.1*sin(10*t); %右边界条件 可以改 m2就是那个μ2
%系数矩阵
A=-2*eye(length(x))+diag(ones(1,length(x)-1),1)+diag(ones(1,length(x)-1),-1);
c=-1; %第三类边界系数
for n=2:length(t)
u(:,n)=u(:,n-1)+(a^2*dt/dx^2)*A*u(:,n-1) ; %A是系数矩阵 a是热传导方程公式中的
%第一类边界条件的话
%u(1,n)=m1(n); %单独计算每一行的左边界值
%u(end,n)=m2(n); %单独计算每一行的右边界值
%第二类边界条件的话
%u(1,n)=u(2,n)-m1(n)*dx;
%u(end,n)=u(end-1,n)+m2(n)*dx;
%第三类边界条件的话
u(1,n)=(dx*m1(n)-c*u(2,n)) / (dx-c); % c为公式中的系数 具体看笔记
u(end,n)=(dx*m2(n)+c*u(end-1,n)) / (dx+c);
end
plot(x,u(:,end)); %画出最后一行
figure
[T,X]=meshgrid(t,x);
surf(X,T,u);
shading interp
%向后差分法 有热源 f
clc,clear;
a=1; %热传导方程中的
dx=0.02; %尽量大
x=0:dx:1;
dt=0.00001; %尽量小
t=0:dt:1;
%构造温度分布矩阵
u=zeros(length(x),length(t));
u(:,1)=30; %t=0初始条件 可以改
f=2*exp(-20*(x-1/2).^2); %热源
m1=20+0.0*sin(t); %左边界条件 可以改
m2=0-0.0*sin(10*t); %右边界条件 可以改
%系数矩阵
A=-2*eye(length(x))+diag(ones(1,length(x)-1),1)+diag(ones(1,length(x)-1),-1);
c=1; %热传导方程中的系数
for n=2:length(t)
%u(:,n)=u(:,n-1)+(a^2*dt/dx^2)*A*u(:,n-1) ; %A是系数矩阵 a是热传导方程公式中的
u(:,n)=u(:,n-1)+(a^2/dx^2*A*u(:,n-1)+f')*dt;
%第一类边界条件的话
u(1,n)=m1(n); %单独计算每一行的左边界值
u(end,n)=m2(n); %单独计算每一行的右边界值
%第二类边界条件的话
%u(1,n)=u(2,n)-m1(n)*dx;
%u(end,n)=u(end-1,n)+m2(n)*dx;
%第三类边界条件的话
%u(1,n)=(dx*m1(n)-c*u(2,n)) / (dx-c); % c为公式中的系数 具体看笔记
%u(end,n)=(dx*m2(n)+c*u(end-1,n)) / (dx+c);
end
plot(x,u(:,end)); %画出最后一行
%axis([x(1) x(end) 0 1]);
figure
[T,X]=meshgrid(t,x);
surf(X,T,u);
shading interp
3. ステーション b における一次元波動方程式呉宜東
3. 最小二乗法
実際のデータ セットと適合されたデータ セットは 1 つずつ実行されます。
(1)作差
(2) 正方形
(3)再度合計する
(4) 再度反復して合計をどんどん小さくします (反復では、ランダム最適化アルゴリズムまたは可変ステップ サイズ アルゴリズムを使用して横断することができます)
(5) 絵を描いたり、絵をはめたり、紙を読んだり
神と悪魔の絵を描く必要がありますか? ? ? ? ?
4. 二分探索法は、単一変数および単一目的の最適化アルゴリズムに適しています。
主に単一変数と単調関数に適しています
% 单变量优化
clc,clear
xmin = 1;
xmax = 5;
x = xmin:0.0001:xmax;
yy = ones(1,length(x)).*4;
plot(x,exp(x),x,yy,' r:');
i = 1;
hold on
while (abs(xmax-xmin)>1e-5)
xmid(i) = (xmax+xmin)/2; %取中点 自变量
ymid(i) = exp(xmid(i)); %将中点带入函数计算结果 因变量 前提函数得是单调函数
if ymid(i)>4 % 4为函数目标值 这是已知了函数目标值
xmax = xmid(i);
else
xmin = xmid(i);
end
plot(xmid(i),ymid(i),'ro'); %要画中点收敛图
hold on
i=i+1;
end
figure
plot(xmid,'k');
xlabel('迭代次数');
ylabel('中点位置变化');
figure
plot(ymid,'k');
xlabel('迭代次数');
ylabel('中点位置处的函数值变化');
5. 遺伝的アルゴリズム
6.描画
1. 同じ絵上の複数の線、異なる色、異なる線分
図
プロット(t(1,:),T(11,:),'-');
ホールド
プロット(t(1,:),T(21,:),'--');
プロット(t(1,:),T(31,:),':');
プロット(t(1,:),T(41,:)'-.');
プロット(t(1,:),T(51,:));
プロット(t(1,:),T(61,:));
プロット(t(1,:),T(71,:));
プロット(t(1,:),T(81,:));
保留
凡例({'x=0.3','x=0.6','x=3.6','x=6.6','x=8.4','x=10.2','x=12.7','x= 15.2'},'場所','南東','列数',2);
2. 3次元グラフ機能
メッシュ()、プロット3()、散乱()、散乱3()
図
[t,x] = メッシュグリッド(t,x);
Surf(t,x,T)
シェーディング補間
3. データインポート関数 xlsread()
data = xlsread('Experimental data.xlsx',2); %テーブル 2 データの抽出
t = data(:,1); %テーブル 2 の最初の列のデータ
T_test = data(:,2); %テーブル 2 の 2 番目の列のデータ
7. 確率的最適化アルゴリズム (2018 年問 1) + 最小二乗法またはその他 --- > データ フィッティング
8. 勾配法最適化アルゴリズム
U 字型の図を描く必要があり、アルゴリズムには制限があります。
アルゴリズム:
9. マルチスタートグローバル検索アルゴリズム ( MultiStartアルゴリズム)
10. 定積分と不定積分
1. 不定積分:
int コマンドに整数制限を追加すると、関数の定整数値を求めることができます。
syms x
>> int(log(x)/(1-x)^2)
ans =
- log(x/(x - 1)) - log(x)/(x - 1) %不定积分求出来为解析解
2. 定積分:
syms x
>> d = int(exp(-x)/(x+2),x,0,2)
d =
-exp(2)*(ei(-2) - ei(-4))
>> double(d)
ans =
0.333 %定积分求出来为数值解
11. 常微分、偏微分方程式の一般解、特殊解を解く dsolve -> link
s=dsolve('2*Dx+Dy-y=exp(-t)','Dx+x+y=0') sx
% は x の一般解を求めます。答えは s に保存されているため、次のようにすることができます。 sx と sy で調整 方程式の具体的な解を求める (solve 関数の使用)
sy % y の一般的な解を求める
s=dsolve('2*Dx+Dy-y=exp(-t)','Dx+x +y=0','x(0 )=1.5','y(0)=0')
sx % x の特殊解を求める
sy % y の特殊解を求める
syms xy
f= sin(x)*cos(y)+x^3+log(x);
結果=差分(f,x);
12. 過去5年間の国家Aの問題
2016 係留システム設計
2017 CT システムパラメータの校正とイメージング
2018 高温作業用の特別な衣服のデザイン
2019 高圧油管の圧力制御
2020 年の炉温度曲線
2021 アクティブ反射面の「FAST」形状調整