Switch to full style
Coloque todas as dúvidas que tiver sobre multiplicação de matrizes, soma e subtracção, assim como matriz inversa e determinantes
Responder

programacao matlab com matrizes - implementação da função anterior

30 jan 2019, 18:35

Boa tarde,

Alguém me pode ajudar neste exercício matlab? É a alinea B.

function [i120, m120]= func11(mat)

i120 = 0;

m120 = 0;

for i = 1:size(mat,1)

A partir daqui já não consigo acabar o código pois não estou a ver como é que consigo implementar a função anterior.. Alguém me pode dar uma ajuda,por favor?

Thanks!
Anexos
duvida matlab.PNG

Re: programacao matlab com matrizes - implementação da função anterior

30 jan 2019, 18:36

aluno20000 Escreveu:Boa tarde,

Alguém me pode ajudar neste exercício matlab? É a alinea B.

function [i120, m120]= func11(mat)

i120 = 0;

m120 = 0;

for i = 1:size(mat,1)

A partir daqui já não consigo acabar o código pois não estou a ver como é que consigo implementar a função anterior.. Alguém me pode dar uma ajuda,por favor?

Thanks!
Anexos
matlab duvida exercicio.PNG

Re: programacao matlab com matrizes - implementação da função anterior

31 jan 2019, 18:31

Já estou um pouco destreinado em Matlab mas o seguinte código funciona:

% [ i120, m120] = func11( mat )
% Entrada: mat é uma matriz de inteiros
% Saída: i120 é o nº de elementos da matriz com valor igual a 120
% m120 é o nº de elementos da matriz com valor maior do que 120
function [ i120, m120 ] = func11( mat )
i120 = 0;
m120 = 0;
[L,C] = size(mat);
for i=1:L
[a,b] = func10(mat(i,:),120);
i120 = i120 + a;
m120 = m120 + b;
end

Isto não significa que não possam existir maneiras mais eficientes ou com melhores prácticas de resolver o problema.

Re: programacao matlab com matrizes - implementação da função anterior

01 fev 2019, 11:37

Rui Carpentier Escreveu:Já estou um pouco destreinado em Matlab mas o seguinte código funciona:

% [ i120, m120] = func11( mat )
% Entrada: mat é uma matriz de inteiros
% Saída: i120 é o nº de elementos da matriz com valor igual a 120
% m120 é o nº de elementos da matriz com valor maior do que 120
function [ i120, m120 ] = func11( mat )
i120 = 0;
m120 = 0;
[L,C] = size(mat);
for i=1:L
[a,b] = func10(mat(i,:),120);
i120 = i120 + a;
m120 = m120 + b;
end

Isto não significa que não possam existir maneiras mais eficientes ou com melhores prácticas de resolver o problema.


Obrigado pela resposta.
No entanto não percebi porque é que:
[L,C] = size(mat) (acho que seria L = size(mat))
i120 = i120 + a (acho que seria i120 = i120 + 1)
m120 = m120 + b; (acho que seria m120 = m120 +1)
Caso me pudesse explicar porque o que fiz está errado, agradecia imenso

Re: programacao matlab com matrizes - implementação da função anterior  [resolvida]

02 fev 2019, 14:49

[L,C] = size(mat) (acho que seria L = size(mat))

size(mat) dá um vetor com duas entradas, a primeira é o nº de linhas da matriz mat, a segunda é o número de colunas. Uma outra hipótese seria L=size(mat,1) que é equivalente a dar a primeira entrada de size(mat).
i120 = i120 + a (acho que seria i120 = i120 + 1)
m120 = m120 + b; (acho que seria m120 = m120 +1)

Note que já temos uma função func10 que determina o número de elementos que são iguais a 120 (a) e o número de elementos que são superiores a 120 (b) para uma dada linha de mat (quando a função recebe como argumentos essa linha e o nº 120: [a,b]=func10(mat(i,:),120)). Assim sendo, para determinar i120 (o nº de entradas da matriz mat iguais a 120) e m120 (o nº de entradas da matriz mat maiores que 120), só precisamos de somar os a's e os b's de todas as linhas de mat. Daí o ciclo:
for i=1:L
[a,b] = func10(mat(i,:),120);
i120 = i120 + a;
m120 = m120 + b;
end

que equivale a [i120, m120] = func10(mat(1,:),120) + func10(mat(2,:),120) + ... + func10(mat(L,:),120).

Re: programacao matlab com matrizes - implementação da função anterior

02 fev 2019, 17:17

Rui Carpentier Escreveu:
[L,C] = size(mat) (acho que seria L = size(mat))

size(mat) dá um vetor com duas entradas, a primeira é o nº de linhas da matriz mat, a segunda é o número de colunas. Uma outra hipótese seria L=size(mat,1) que é equivalente a dar a primeira entrada de size(mat).
i120 = i120 + a (acho que seria i120 = i120 + 1)
m120 = m120 + b; (acho que seria m120 = m120 +1)

Note que já temos uma função func10 que determina o número de elementos que são iguais a 120 (a) e o número de elementos que são superiores a 120 (b) para uma dada linha de mat (quando a função recebe como argumentos essa linha e o nº 120: [a,b]=func10(mat(i,:),120)). Assim sendo, para determinar i120 (o nº de entradas da matriz mat iguais a 120) e m120 (o nº de entradas da matriz mat maiores que 120), só precisamos de somar os a's e os b's de todas as linhas de mat. Daí o ciclo:
for i=1:L
[a,b] = func10(mat(i,:),120);
i120 = i120 + a;
m120 = m120 + b;
end

que equivale a [i120, m120] = func10(mat(1,:),120) + func10(mat(2,:),120) + ... + func10(mat(L,:),120).


Já percebi! Muito obrigado pela ajuda!
Em relação à minha primeira dúvida, enganei-me a escrever: queria dizer L=size(mat,1) ,que foi como eu tinha feito inicialmente.
Responder