人生的意义就是思考其意义分享 http://blog.sciencenet.cn/u/qianlivan 天体物理工作者,家乡云南昆明。

博文

matlab工作日志

已有 8860 次阅读 2013-8-14 17:03 |个人分类:知识|系统分类:科研笔记| MATLAB

20140916

Hello World!

disp('Hello World!')


20140324

Matlab处理fits文件一直是一个老大难问题,下面的连接提供了一套解决方案。
例子:
data=fits_read('myFITS.fits');header=fitsinfo('myFITS.fits');fits_write('myFITS_copy.fits', data, header);



20130906


ode45的精度可以通过odeset控制,具体如下。
ode = @(t,y) search3body(t,y);
options=odeset('reltol',1e-15,'abstol',1e-15)
[t,y] = ode45(ode, tspan, y0);



20130830


ode45的精度不知如何控制。步长可以调整。

tspan = 0:0.0001:10;
[t,y] = ode45(ode, tspan, y0);



20130827


运行了计算轨道的程序,熟悉了一下画图。
===========================================
% in search3body.m

function dydt = search3body(t,y)
% search3body Defines the equation of motion of three bodies of equal mass
% Copyright NAOC Qian Lei
% $Revision: 1.0 $  $Date: 2013/08/15 15:43:12 $

x1 = y(1);
y1 = y(2);
x2 = y(3);
y2 = y(4);
x3 = y(5);
y3 = y(6);
x1p = y(7);
y1p = y(8);
x2p = y(9);
y2p = y(10);
x3p = y(11);
y3p = y(12);
fx21 = (x2-x1)./(((x1-x2)^2+(y1-y2)^2)^(3/2));
fx31 = (x3-x1)./(((x1-x3)^2+(y1-y3)^2)^(3/2));
fy21 = (y2-y1)./(((x1-x2)^2+(y1-y2)^2)^(3/2));
fy31 = (y3-y1)./(((x1-x3)^2+(y1-y3)^2)^(3/2));
fx32 = (x3-x2)./(((x2-x3)^2+(y2-y3)^2)^(3/2));
fx12 = (x1-x2)./(((x2-x1)^2+(y2-y1)^2)^(3/2));
fy32 = (y3-y2)./(((x2-x3)^2+(y2-y3)^2)^(3/2));
fy12 = (y1-y2)./(((x2-x1)^2+(y2-y1)^2)^(3/2));
fx13 = (x1-x3)./(((x3-x1)^2+(y3-y1)^2)^(3/2));
fx23 = (x2-x3)./(((x3-x2)^2+(y3-y2)^2)^(3/2));
fy13 = (y1-y3)./(((x3-x1)^2+(y3-y1)^2)^(3/2));
fy23 = (y2-y3)./(((x3-x2)^2+(y3-y2)^2)^(3/2));


dydt = [x1p;...
       y1p;...
       x2p;...
       y2p;...
       x3p;...
       y3p;...
       fx21+fx31;...
       fy21+fy31;...
       fx32+fx12;...
       fy32+fy12;...
       fx13+fx23;...
       fy13+fy23;...
       ];
===========================================


===========================================
% in test search3body.m

tspan = [0, 100];
x1 = -1;
x2 = 1;
x3 = 0;
y1 = 0;
y2 = 0;
y3 = 0;

x1p = 0.1;
y1p = 0.2;


x2p = x1p;
x3p = -2*x1p;
y2p = y1p;
y3p = -2*y1p;

y0 = [x1; y1; x2; y2; x3; y3; x1p; y1p; x2p; y2p; x3p; y3p];

ode = @(t,y) search3body(t,y);
[t,y] = ode45(ode, tspan, y0);

% Plot of the solution
subplot(2,1,1)
hold on;
plot(y(:,1),y(:,2),'Color','red');
plot(y(:,3),y(:,4),'Color','green');
plot(y(:,5),y(:,6),'Color','blue');
xlabel('x')
ylabel('y')
title('3 body trajectories')
hold off;

format long e
sta = 1;
rpf = -log10(sqrt((y(sta:end,1)-x1).^2+(y(sta:end,2)-y1).^2+(y(sta:end,3)-x2).^2+(y(sta:end,4)-y2).^2 ...
     +(y(sta:end,5)-x3).^2+(y(sta:end,6)-y3).^2+(y(sta:end,7)-x1p).^2+(y(sta:end,8)-y1p).^2 ...
     +(y(sta:end,9)-x2p).^2+(y(sta:end,10)-y2p).^2 ...
     +(y(sta:end,11)-x3p).^2+(y(sta:end,12)-y3p).^2));
subplot(2,1,2)
plot(t,rpf);
xlabel('t')
ylabel('r.p.f.')
title('3 body return proximity function')
===========================================



20130814

使用官网上的示例程序重新熟悉了一下用matlab求解微分方程。将微分方程写成一个函数保存在同名m文件中,然后用ode45进行求解。
============================================

% in vanderpoldemo.m

function dydt = vanderpoldemo(t,y,Mu)
%VANDERPOLDEMO Defines the van der Pol equation for ODEDEMO.

% Copyright 1984-2002 The MathWorks, Inc.
% $Revision: 1.2 $  $Date: 2002/06/17 13:20:38 $

dydt = [y(2); Mu*(1-y(1)^2)*y(2)-y(1)];

============================================
============================================
tspan = [0, 20];
y0 = [2; 0];
Mu = 1;
ode = @(t,y) vanderpoldemo(t,y,Mu);
[t,y] = ode45(ode, tspan, y0);

% Plot of the solution
plot(t,y(:,1))
xlabel('t')
ylabel('solution y')
title('van der Pol Equation, mu = 1')
============================================




https://blog.sciencenet.cn/blog-117333-716788.html

上一篇:python工作日志
下一篇:CLASS工作日志
收藏 IP: 159.226.171.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (5 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-9-27 07:44

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部