i'm having these error: subscripts must be either integers 1 to (2^31)-1 or logicals
i'm having these error: subscripts must be either integers 1 to (2^31)-1 or logicals
我开始编程并选择 Octave,因为它是免费的 "version" matlab,他们在我的大学使用的程序。
所以,当我尝试 运行 我的代码时,这些问题就出现了:
error: I(0): subscripts must be either integers 1 to (2^31)-1 or logicals
我不知道为什么,因为当我用 R 代替 RR 时,代码有效。
我想也许问题在于 R-Rn 实际上并不等于 0,而是接近它的值,因此问题就来了,但是在用简单的数字做了一些测试之后,我发现结果它实际上是 0,但对于矩阵来说可能不同。
请帮忙。
哦,不要注意笔记,我来自巴西。
clear
tic %inicio da cronometragem
f = @(x) 16*x.^6 + 8*x -6; %definir função
df = @(x) 96*x.^5 + 8; %definir derivada da função
tol = 10E-4; %define a tolerancia
xmin = -5; %menor valor para X
xmax = 5; %maior valor para X
ymin = -5; %menor valor para Y
ymax = 5; %maior valor para Y
npx = 8; %número de pontos do eixo X
npy = 8; %número de pontos do eixo Y
dx = (xmax-xmin)/npx; %calculo da distância entre os
pontos do eixo X
dy = (ymax-ymin)/npy; %calculo da distância entre os
pontos do eixo Y
A = zeros(npy+1, npx+1); %define matriz cheia de 0, do
tamanho definido por npx e npy
x = xmin:dx:xmax; %define tamanho e distancia entre os pontos de uma linha
y= ymin:dy:ymax; %define tamanho e distancia entre os pontos de uma coluna
A = x+i*y'; %preenche a matriz A com os valores desta multiplicação
[m n] = size(A); %define m e n como o tamanho da linha e coluna, respectivamente, da matriz A
I = zeros(m,n); %cria outra matriz, I, de mesmo tamanho de A, mas cheia de 0
i = 0; %numero de interações definido como 0
R = I;
for kk = 1:50 %define numero de interações do metodo de newton
An = A-f(A)./df(A); %método de newton
i = i + 1; %aumentar o numero de interação a cada vez que repete
Rn = R
R = abs((An - A)) < tol %cria uma matriz R com 1 ou 0 se a posição alcançou a tolerancia ou não
RR = R - Rn
I(RR) = i %preenche a matriz I com o numero de interação de cada posição da matriz A
A = An; %iguala A com An para que o metodo de newton possa continuar
end
imagesc(I) %forma o fractal
toc %para o cronômetro
当我 运行 代码时,我得到 RR 全为零。在 MATLAB 中索引从 1 开始(因此零是无效索引)。尝试将 RR = R - Rn
更改为 RR = R - Rn + 1
。这至少让代码 运行 并生成图像(尽管我不确定图像是否正确)。
它适用于 R,因为 R 是逻辑数组 - 使用逻辑数组进行索引接受 0 作为值,因为逻辑数组索引中的 0 意味着“不适用于此元素”。
当你减去你的数组 Rn 时,RR 变成了一个双精度数组。以这种方式索引不能接受 0,因为没有第 0 个元素。
您需要将 RR 转换为逻辑数组(该函数在 MATLAB 中为 'logical')才能正常工作。
我开始编程并选择 Octave,因为它是免费的 "version" matlab,他们在我的大学使用的程序。
所以,当我尝试 运行 我的代码时,这些问题就出现了:
error: I(0): subscripts must be either integers 1 to (2^31)-1 or logicals
我不知道为什么,因为当我用 R 代替 RR 时,代码有效。
我想也许问题在于 R-Rn 实际上并不等于 0,而是接近它的值,因此问题就来了,但是在用简单的数字做了一些测试之后,我发现结果它实际上是 0,但对于矩阵来说可能不同。
请帮忙。
哦,不要注意笔记,我来自巴西。
clear
tic %inicio da cronometragem
f = @(x) 16*x.^6 + 8*x -6; %definir função
df = @(x) 96*x.^5 + 8; %definir derivada da função
tol = 10E-4; %define a tolerancia
xmin = -5; %menor valor para X
xmax = 5; %maior valor para X
ymin = -5; %menor valor para Y
ymax = 5; %maior valor para Y
npx = 8; %número de pontos do eixo X
npy = 8; %número de pontos do eixo Y
dx = (xmax-xmin)/npx; %calculo da distância entre os
pontos do eixo X
dy = (ymax-ymin)/npy; %calculo da distância entre os
pontos do eixo Y
A = zeros(npy+1, npx+1); %define matriz cheia de 0, do
tamanho definido por npx e npy
x = xmin:dx:xmax; %define tamanho e distancia entre os pontos de uma linha
y= ymin:dy:ymax; %define tamanho e distancia entre os pontos de uma coluna
A = x+i*y'; %preenche a matriz A com os valores desta multiplicação
[m n] = size(A); %define m e n como o tamanho da linha e coluna, respectivamente, da matriz A
I = zeros(m,n); %cria outra matriz, I, de mesmo tamanho de A, mas cheia de 0
i = 0; %numero de interações definido como 0
R = I;
for kk = 1:50 %define numero de interações do metodo de newton
An = A-f(A)./df(A); %método de newton
i = i + 1; %aumentar o numero de interação a cada vez que repete
Rn = R
R = abs((An - A)) < tol %cria uma matriz R com 1 ou 0 se a posição alcançou a tolerancia ou não
RR = R - Rn
I(RR) = i %preenche a matriz I com o numero de interação de cada posição da matriz A
A = An; %iguala A com An para que o metodo de newton possa continuar
end
imagesc(I) %forma o fractal
toc %para o cronômetro
当我 运行 代码时,我得到 RR 全为零。在 MATLAB 中索引从 1 开始(因此零是无效索引)。尝试将 RR = R - Rn
更改为 RR = R - Rn + 1
。这至少让代码 运行 并生成图像(尽管我不确定图像是否正确)。
它适用于 R,因为 R 是逻辑数组 - 使用逻辑数组进行索引接受 0 作为值,因为逻辑数组索引中的 0 意味着“不适用于此元素”。
当你减去你的数组 Rn 时,RR 变成了一个双精度数组。以这种方式索引不能接受 0,因为没有第 0 个元素。
您需要将 RR 转换为逻辑数组(该函数在 MATLAB 中为 'logical')才能正常工作。