改进的欧拉法计算常微分方程初值问题 C Matlab
程序员文章站
2024-03-24 23:01:40
...
Question:
Matlab语言:
fun.m
function f = fun(x , y)
f = y - 2 * x / y
Euler1.m
function y = Euler1(x0, xn, y0, n)
x = x0;
y = y0;
%设置步长为h = 0.1
h = 0.1;
for i = 1: 1/h
yp = y + h * fun(x,y);
x = x0 + i * h;
y = yp;
fprintf('x%d = %f y%d = %f\n', i, x, i, y)
end
main.m
clc
clear
Euler1(0, 1, 1, 10)
C语言
#include <stdio.h>
#include <math.h>
double f(double x, double y){ //微分方程右端函数
return (y - 2 * x / y);
}
void Euler(double x0, double xn, double y0, int n){ //改进的欧拉公式
double yp, yc, x = x0, y = y0, h = (xn - x0) / n;
for(int i = 1; i <= n; i++){
yp = y + h * f(x, y);
x = x0 + i * h;
y = yp;
printf("x%d = %f y%d = %f\n", i, x, i, y);
}
}
int main(){
double x0 = 0, xn = 1, y0 = 1, n = 10;
printf("x0 = %f y0 = %f\n", x0, y0);
Euler(x0, xn, y0, n);
return 0;
}
C语言版本参考自博客:https://blog.csdn.net/sunshineacm/article/details/79069594?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-2-79069594.nonecase&utm_term=%E6%AC%A7%E6%8B%89%E6%96%B9%E6%B3%95%E6%B1%82%E5%88%9D%E5%80%BC%E9%97%AE%E9%A2%98%E4%BE%8B%E9%A2%98&spm=1000.2123.3001.4430
上一篇: PHP合成图片,文字居中,图片处理成圆角
下一篇: 数学建模笔记-斜抛运动建模