当前位置: 首页 > 知识库问答 >
问题:

求解函数为离散形式的微分方程组(matlab)

龙俊良
2023-03-14

我这次问题是基于我几个月前问过的一个老问题(见这里),如果你不想重复我的第一个问题,我可以对这个问题做一个简短的概述。

fx = [0.5644 0.6473 0.7258 0.7999 0.8697 0.9353 0.9967 1.0540 1.1072 1.1564 ...
      1.2016 1.2429 1.2803 1.3138 1.3435 1.3695 1.3917 1.4102 1.4250 1.4362 ...
      1.4438 1.4477 1.4482 1.4450 1.4384 1.4283 1.4147 1.3977 1.3773 1.3535 ...
      1.3263 1.2957 1.2618 1.2246 1.1841 1.1403 1.0932 1.0429 0.9893 0.9325 0.8725];

第二个x包含函数的求值点:

x = 0:0.25:10

这个离散函数fx是一个ode,我需要用MATLAB中的ode45来求解它。但是ode45不采用离散函数,所以解决方法是插值这两个向量。然后我可以有一个函数句柄,我可以将它发送到ode45,如下所示:

f = @(xq)interp1(x,fx,xq);
tspan = [0 1];
x0 = 2;
xout = ode45(@(t,x)f(x),tspan,x0);

我现在的问题:

fx1 = [....function values...]
x1 = [...the points where the function fx1 was evaluated...]

fx2 = [....function values...]
x2 = [...the points where the function fx2 was evaluated...]

fx3 = [....function values...]
x3 = [...the points where the function fx3 was evaluated...] 

我已经尝试了不同的事情,但我的编程技能只是没有伸展那么长,我可以解决这个问题,这是因为我正在寻求帮助的原因!

我的猜测-解决方案

我相信,如果我使用for-loop来创建一个包含系统的3个插值方程的函数句柄,我可以将这个函数句柄发送到ode45。这听起来是不是一个不错的选择?

共有1个答案

魏安宁
2023-03-14

定义此函数并将其保存在function_helper.m中

function result = function_helper(f1, x1, f2, x2, f3, x3, xq)
    result = [
        interp1(x1, f1, xq(1))
        interp1(x2, f2, xq(2))
        interp1(x3, f3, xq(3))
    ];
end

然后像这样整合

f = @(t,xq) function_helper(f1, x1, f2, x2, f3, x3, xq);
tspan = [0 1];
x0 = 1;
xout = ode45(f, tspan, x0);
 类似资料:
  • 我正在研究一个非线性微分方程求解器。我能得到一般的解决方案,但不能得到具体的解决方案。当我试图找到集成常量时,我得到了错误:E_x不可调用的,我的解决方案被归类为一个列表,所以我不能在其中替换任何东西。 这是我的代码: 我在上得到了可调用错误,在我在书中的例子(数值Python)解决了一个线性ODE,但没有得到这个错误。有没有一种不同的方法来解决非线性DE,或者将E定义为可调用的,而将E_sol定

  • 我正在尝试使用Java解决一个数独难题。目前该类无法正确解数独。 此类尝试在9x9矩阵中查找0(空格),并在列表中记下0的位置,以供以后参考。然后,它将使用这些位置来求解该0。不幸的是,它似乎不像我希望的那样起作用。 这是我使用的9x9矩阵: 这个9x9矩阵中有51个0,但是当它解决这个难题时,出于某种奇怪的原因,它会附加66个位置。我似乎无法准确指出问题所在。任何帮助都将不胜感激! 这是它尝试的

  • 我正在尝试用python中的Symphy模块求解一个微分方程。这就是我所做的 现在,我试图得到一个极性形式的解,包括sin,cos和复数项(I),如图所示。在这张图片中,w\n是sqrt(k/m) 我试过了 但是它返回一个带有双曲函数的表达式。rewrite(cos)也返回一个带有双曲函数的表达式。 我也试过了 但它给出了最初的答案。 有没有办法把这个指数形式的复形转换成没有双曲函数的极形? 谢谢

  • 主要内容:在MATLAB中求解基本代数方程,求解代数中的基本代数方程,在MATLAB中求解二次方程,在Octave中求解二次方程,求解MATLAB中的高阶方程,在Octave中求解高阶方程,MATLAB中求解方程组,在Octave中求解方程组,在MATLAB中扩展和集合方程,在Octave扩展和集合方程,代数表达式的因式分解和简化到目前为止,我们已经看到所有的例子都在MATLAB以及它的GNU,或者称为Octave。 但是,为了求解基本代数方程,MATLAB和Octave都不同,所以这里将分别介

  • 离散流或者DStreams是Spark Streaming提供的基本的抽象,它代表一个连续的数据流。它要么是从源中获取的输入流,要么是输入流通过转换算子生成的处理后的数据流。在内部,DStreams由一系列连续的 RDD组成。DStreams中的每个RDD都包含确定时间间隔内的数据,如下图所示: 任何对DStreams的操作都转换成了对DStreams隐含的RDD的操作。在前面的例子中,flatM

  • TensorFlow 不仅仅是用来机器学习,它更可以用来模拟仿真。在这里,我们将通过模拟仿真几滴落入一块方形水池的雨点的例子,来引导您如何使用 TensorFlow 中的偏微分方程来模拟仿真的基本使用方法。 注:本教程最初是准备做为一个 IPython 的手册。 译者注:关于偏微分方程的相关知识,译者推荐读者查看 网易公开课 上的《麻省理工学院公开课:多变量微积分》课程。 基本设置 首先,我们需要