0

考虑以下 matlab 代码片段:

g = @(x, t)x.*0;
u_explizit = explizit_Euler(20, 800, 1, 1, zeros(21,1), g, [1;2], 0, 0.1);
figure
surf(u_explizit);
shading flat;
title('Aufgabe 2 - Explizit Euler');

u_implizit = implizit_Euler(20, 800, 1, 1, zeros(21,1), g, [1;2], 0, 0.1);

这两个函数都explizit_Eulerimplizit_Euler相同的命令开始(此处显示为explizit_Euler

function [u] = explizit_Euler(n, nt, T, kappa, u0, f, b, gN, gD)

tau = T/nt;

[A, z] = prepare_system(n, f, b, gN, gD);
z = z';
...
end

该函数prepare_system如下所示:

function [ A, z] = prepare_system(n, f, b, gN, gD)
%PREPARE_MATRIX_SYSTEM Prepares A_h and solution vector f_h

    h = 1/n;
    z = f((0:n)./n);
...
end

prepare_system从内部调用explizit_Euler就可以了。但是,来自内部的调用implizit_Euler会传递一条错误消息,我就是不知道为什么:

Subscript indices must either be real positive integers or logicals.
Error in implizit_Euler (line 5)
    z = f((0:n)./n);

似乎matlab认为f是一个向量,因此它无法访问f(0),如果是一个向量,这是有道理f的。而是f一个函数句柄!为什么完全相同的代码在早期的代码中可以正常工作explizit_Euler

4

1 回答 1

1

我在 (!) 的签名中放错了参数implizit_Euler- 对不起,伙计们!

于 2013-06-12T13:44:12.230 回答