欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

改进的欧拉法计算常微分方程初值问题 C Matlab

程序员文章站 2024-03-24 23:01:40
...

Question:
改进的欧拉法计算常微分方程初值问题 C Matlab

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

相关标签: 数学 MATLAB