[Modelado matemático] Diferenciales ordinarias, ecuaciones diferenciales parciales

1. Ecuaciones diferenciales ordinarias

frontera ordinaria  

Se sabe que el valor inicial de t0 tiempo ode45() es el primer orden del método Runge-Kutta, y los órdenes superiores son los mismos como sigue:

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);

Función no anónima de límite de segmento

% 主函数
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

 

 Código de función ode45() mejorado escrito a mano

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); % 第二个输出参数为微分方程的解

Para valores límite complejos (es decir, se conoce el valor inicial y el valor final), utilice la función bvp4c()

2. Ecuaciones diferenciales parciales

1. función pdepe() elipse-parábola

Ecuación rectora límite izquierdo límite derecho valor inicial

formato estandar

 Formato de valor inicial

 Formato estándar de valor de límite: dos ecuaciones para el límite izquierdo y el límite derecho

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. Solución a la ecuación de conducción de calor unidimensional.

1.Método de diferencia directa

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. Método de diferencia hacia atrás

% 向后差分法 无热源
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. Ecuación de onda unidimensional Wu Yidong en la estación b

3. Método de mínimos cuadrados

El conjunto de datos real y el conjunto de datos ajustado se llevan a cabo uno por uno:

(1) Diferencia de cultivo 

(2) Cuadrado

(3)Suma de nuevo

(4) Iterar nuevamente para hacer la suma cada vez más pequeña (la iteración puede usar un algoritmo de optimización aleatoria o un algoritmo de tamaño de paso variable para recorrer)

(5) Hacer dibujos, encajar imágenes y leer el periódico.

¿Necesitas hacer un dibujo de dioses y demonios? ? ? ? ?

4. El método de búsqueda binaria es adecuado para algoritmos de optimización de una sola variable y de un solo objetivo.

Principalmente adecuado para variables individuales y funciones monótonas.

% 单变量优化 
 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. Algoritmo genético 

6.Dibujo

  1. Varias líneas en la misma imagen, diferentes colores, diferentes segmentos de línea

gráfico de figuras
(t(1,:),T(11,:),'-');
espera en
plot(t(1,:),T(21,:),'--');
trama(t(1,:),T(31,:),':');
trama(t(1,:),T(41,:)'-.');
trama(t(1,:),T(51,:));
trama(t(1,:),T(61,:));
trama(t(1,:),T(71,:));
trama(t(1,:),T(81,:));
mantener alejada
la leyenda ({'x=0.3','x=0.6','x=3.6','x=6.6','x=8.4','x=10.2','x=12.7','x= 15.2'},'Ubicación','sureste','NumColumns',2);

 

 

   2. Función de gráfico tridimensional

malla(),plot3(), dispersión(), dispersión3()

figura
[t,x] = meshgrid(t,x); interfaz de sombreado
surf(t,x,T)

 3. Función de importación de datos xlsread()

data = xlsread('Experimental data.xlsx',2); %Extraer datos de la tabla 2
t = data(:,1); %Tabla 2 datos de la primera columna
T_test = data(:,2); %Tabla 2 datos de la segunda columna

7. Algoritmo de optimización estocástica (Pregunta 1 de 2018) + Método de mínimos cuadrados u otros --- > Ajuste de datos

8. Algoritmo de optimización del método de gradiente

Tienes que dibujar un diagrama en forma de U. El algoritmo tiene limitaciones. 

algoritmo:

  

9. Algoritmo de búsqueda global de inicio múltiple ( algoritmo MultiStart )


10. Integrales definidas e indefinidas

1. Integral indefinida:

Al agregar el límite integral al comando int, puedes encontrar el valor integral definido de la función.

syms x
>> int(log(x)/(1-x)^2)
 
ans =
 
- log(x/(x - 1)) - log(x)/(x - 1)  %不定积分求出来为解析解


 2. Integral definida:

syms x
>> d = int(exp(-x)/(x+2),x,0,2)
 
d =
 
-exp(2)*(ei(-2) - ei(-4))
 
>> double(d)
ans =
 
    0.333        %定积分求出来为数值解

11. Resolver diferenciales ordinarias, soluciones generales de ecuaciones diferenciales parciales y soluciones especiales dsolve ->  enlace

s=dsolve('2*Dx+Dy-y=exp(-t)','Dx+x+y=0') sx %
encuentra la solución general de x. Dado que la respuesta está almacenada en s, puede ser ajustado con sx y sy Encuentre la solución específica de la ecuación (uso de la función de resolución)
sy % Encuentre la solución general de y
s=dsolve('2*Dx+Dy-y=exp(-t)','Dx+x +y=0','x(0 )=1.5','y(0)=0')
sx % Encuentra la solución especial de x
sy % Encuentra la solución especial de y

sims xy
f= sin(x)*cos(y)+x^3+log(x);
resultado=diff(f,x);

12. Preguntas nacionales A en los últimos cinco años

2016 Diseño del sistema de amarre

2017 Calibración e imágenes de parámetros del sistema CT

2018 Diseño de vestimenta especial para operaciones de alta temperatura.

2019 Control de presión de tuberías de aceite de alta presión

Curva de temperatura del horno 2020

2021 Ajuste de forma “RÁPIDO” de superficies reflectantes activas

Supongo que te gusta

Origin blog.csdn.net/m0_73381672/article/details/132494889
Recomendado
Clasificación