- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我的代码有效,只是出于某种原因,我的代码总是运行两个 if 语句(两个 y 方程,无论我为第一个 fprintf 问题输入哪个数字)。此外,t,y 列总是比 t,y2 列长得多(编辑,即如果我输入 funt=1,t0=0,t1=10,inity=1,dt=0.1,我的 t,y 列有 100行和我的 t,yexact 列有 10 行)。此外,t,y 部分的 t 列对于第一个 if 语句(y 方程)全为零,对于第二个 if 语句(y 方程)全为 1。任何帮助将不胜感激。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double rk4(double(*f)(double,double),double,double,double);
double user_fun_1(double,double);
double user_fun_2(double,double);
int main (void) {
int funct;
double *y,t,y2;
double t0,t1,dt,inity,C;
int i,n;
fprintf(stdout, "Which function do you wish to integrate?\n(1)f(t,y)=t\n(2)f(t,y)=-y\n");
fscanf(stdin,"%d",&funct);
fprintf(stdout,"What is the initial time?\n");
fscanf(stdin,"%lf",&t0);
fprintf(stdout,"What is the final time?\n");
fscanf(stdin,"%lf",&t1);
fprintf(stdout,"What is the initial value of y?\n");
fscanf(stdin,"%lf",&inity);
fprintf(stdout,"what is the step size?\n");
fscanf(stdin,"%lf",&dt);
if (dt>(t1-t0)){
printf("The stepsize has to be less than or equal to the total time\n");
return EXIT_FAILURE;}
n = 1 + (t1-t0)/dt;
y = (double *)malloc(n*sizeof(double));
if (funct=1){
C=inity-(t0*t0*0.5);
printf("%s%25s\n","t","y");
for (y[0]=inity,i=1;i<n;i++){
y[i]=rk4(user_fun_1,dt,t0 + dt * (i-1),y[i-1]);
printf("%lf%25lf\n",t,y[i]);}
printf("%s%25s\n","t","y exact");
for(i=0;i<n;i+=t1){
t=t0+dt*i;
y2=(t*t*0.5) + C;
printf("%lf%25lf\n",t,y2);}}
if (funct=2){
C=inity/(exp(-t0));
printf("%s%25s\n","t","y");
for(y[0]=inity,i=1;i<n;i++){
y[i]=rk4(user_fun_2,dt,t0+dt*(i-1),y[i-1]);
printf("%lf%25lf\n",t,y[i]);}
printf("%s%25s\n","t","y exact");
for(i=t0;i<n;i+=t1){
t=t0+dt*i;
y2=C*exp(-t);
printf("%lf%25lf\n",t,y2);}}
free(y);
return EXIT_SUCCESS;}
double user_fun_1(double t,double y){
return t;}
double user_fun_2(double t, double y){
return -y;}
double rk4(double(*f)(double, double), double dt,double t,double y){
double k1,k2,k3,k4;
k1=dt*f(t,y);
k2=dt*f(t + dt/2,y + k1/2);
k3=dt*f(t + dt/2,y + k2/2);
k4=dt*f(t + dt,y + k3);
return y + (k1 + 2*k2 + 2*k3 +k4)/6;}
最佳答案
您的if
语句是错误的,它是赋值而不是比较。应该是
if (funct==2)
不
if (funct=2)
第一个 if
语句也是如此。
一个安全的 c 习惯是在 if 语句中交换常量和变量的位置。 if(2==funtc) 有效,而 if(2=funct) 会给出编译时错误。下次尝试打开编译器警告,它可以帮助您发现此类错误。如果您使用的是 gcc
,请添加 -Wall -Wextra
标志。
你的 t, y
比 t, y exact
长的原因是你的 n =101
,而 t1 = 10
。所以在第一个 for
循环中,你写了 i++
,所以它循环了 100 次,但是在第二个 for
循环中,你使用了 i+=t1
,所以只循环了11次。
t
始终为 0 的原因是因为您从未为其分配任何初始值,也没有在第一个 for
循环中分配值。
关于c - C 上的 Runge-Kutta 积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27395549/
我正在尝试用python解决系统问题: z &
我在MATLAB中编程了一个自适应步长RK4来求解ODE系统。代码运行时没有错误,但是当我尝试将x与y作图时,它不会产生所需的曲线。我不再是环形形状,而是获得了一条扁平线。从r输出恒定值这一事实可以明
我一直在尝试将 RK4 集成到我正在做的模拟中。下面的函数是我基于第 12 页 this 上的方程式使用 RK4 对 3 维力场进行积分的最佳尝试。网站。 在我的代码中,粒子类主要存储速度和位置列表,
我试图获得一个简单追逐问题的数值解 (动靶+定速模块火箭) 每次迭代我的速度模块都会减少一点,将误差加起来;在几百次迭代之后,错误爆发,速度急剧下降。 但是,使用 Euler 方法(大块下方的代码)时
有人要求我解这个微分方程: (x,y,vx,vy)'=(vx,vy,vy,-vx) 它应该返回周期为 2*pi 的圆周运动。我实现了功能: class FunzioneBase { public:
我一直在研究四阶龙格-库塔求解器,但遇到了一些困难。我已经根据文章 on gafferongames 编写了求解器,但是当我运行一个包含的小例子时,我得到的错误比我用简单的欧拉积分得到的错误要糟糕得多
几乎每个游戏都倾向于使用一些游戏循环。 Gafferongames 有一篇关于如何制作精心设计的游戏循环的好文章:http://gafferongames.com/game-physics/fix-y
我有以下微分方程组: 根据他们告诉我的论文,我可以使用 RK 四阶数值求解它。 如您所见,最后两个方程是耦合的,我构造了一个关联 xn 和 yn 的矩阵(概率),其中 n = 1..(例如,N- 对数
我正在使用 Runge-Kutta 四阶方法数值求解具有四次势的弯曲时空背景标量场的常见运动方程: $\phi^{''}=-3\left(1+\frac{H^{'}}{3H}\right)\phi^{
我有一个耦合方程组:流体静力学平衡方程、质量连续性方程和理想气体的状态方程。这些是,在数学语法中, \frac{dP}{dr}=-\rho*g, 其中 \rho 是密度,g 是重力加速度。 \frac
有人能告诉我,为什么它总是返回相同的“y”值吗?我在 Internet 上搜索了很多,但我仍然不知道为什么它不起作用。 using System; using System.Collections.G
下面是我用于求解一阶 ODE 的四阶 Runge-Kutta 算法。我正在根据找到的维基百科示例检查它 here解决: \frac{dx}{dt} = tan(x) + 1 不幸的是,它有点出局了。我
我正在尝试实现 Runge-Kutta Method for Systems of DEs在 MATLAB 中。我没有收到 correct answers ,我不确定代码或我用来运行它的命令是否有问题
尝试实现自适应步长 Runge-Kutta Cash-Karp 但失败并出现此错误: home/anaconda/lib/python3.6/site-packages/ipykernel_launc
我正在尝试编写一个函数,该函数将使用 4 阶隐式 Runge-Kutta 方法 (IRK) 求解 ODES 系统,但我无法正确定义循环。这里我们定义 IRK 任何建议将不胜感激! function [
Gaffer on Games 有一个 great article关于使用RK4 integration为了更好的游戏物理。实现很简单,但其背后的数学让我感到困惑。我在概念层面上了解导数和积分,但已经
这个公式主要是这个线程的结果:Differential Equations in Java . 基本上,我尝试遵循 Jason S. 的建议,并通过 Runge-Kutta 方法 (RK4) 实现微分
我是Python的新手,我对编程语言的了解还处于起步阶段,所以我复制了所示的Runge-Kutta Python脚本here并根据我的目的对其进行了修改。这是我当前的脚本: import numpy
我一直在将 4 个链接微分方程的欧拉方法实现转换为四阶龙格库塔实现。我相当确信我的一般方法是正确的,并且我已经了解如何应用 RK4,但我可能已经有 6 年没有做过任何半严肃的数学了,所以我可能会错过某
我尝试求解简单的数值方程 - 没有源的线性波动方程:utt = v2 uxx 其中 v - 波速。 我使用初始条件: u(x, 0) = sin(x) ux(x, 0) = -v * sin(x) 对
我是一名优秀的程序员,十分优秀!