How to fix broken function code?

2 views (last 30 days)
Jenni
Jenni on 7 Feb 2024
Commented: Jenni on 7 Feb 2024
Hey! Here is my function and I am trying to estimate the values of b_1 and b_0, but when I am running my code, I get following messages:
"Error using/
Matrix dimensions must agree."
"Error in function sovittaja (line 5):
s_2 = sum((x.*y)/(delta_y.^2));"
"Error in (line 16):
sovittaja(f,v,delta_v).
Here is my function code called "sovittaja":
function [b, bci] = sovittaja(x,y,delta_y)
%%Helper variables:
s_1 = sum(1./(delta_y.^2));
s_2 = sum((x.*y)/(delta_y.^2));
s_3 = sum(x./(delta_y.^2));
s_4 = sum(y./(delta_y.^2));
s_5 = sum(x.^2/(delta_y.^2));
%%Defining D:
D = (s_1*s_5)-(s_3)^2;
%%Analyyttiset lausekkeet:
b_1 = (1/D)*((s_1)*(s_2)-(s_3)*(s_4));
b_0 = (1/D)*((s_5)*(s_4)-(s_3)*(s_2));
%%Margin of errors:
delta_b_1 = sqrt((1/D)*(s_1));
delta_b_0 = sqrt((1/D)*(s_5));
%%Indexs of matrix bci :
bci_11 = b_0 - delta_b_0;
bci_12 = b_1 - delta_b_1;
bci_21 = b_0 + delta_b_0;
bci_22 = b_1 + delta_b_1;
%% Return values:
b = [b_0, b_1];
bci = [bci_11,bci_12;bci_21,bci_22];
And here is what I want to do with the function "sovittaja":
clear all
close all
% Measurement:
i=[1,2,3,4,5]';
% Frequency:
x=[519,549,688,740,821]';
% Voltage:
y=[1.0,1.2,1.9,2.4,2.3]';
% Margin of Error:
delta_y=[0.15,0.40,0.20,0.30,0.10];
sovittaja(x,y,delta_y)
What should I do to make the code work? And how could I plot these?
Thank you for the help!

Accepted Answer

Stephen23
Stephen23 on 7 Feb 2024
Edited: Stephen23 on 7 Feb 2024
Use array division here:
s_2 = sum((x.*y)./(delta_y.^2));
% ^^
and here:
s_5 = sum(x.^2./(delta_y.^2));
% ^^
and possibly in some other locations: check all division and power operations!
Learn the difference:
As a rule of thumb: if you are not doing linear algebra then use array operations.

More Answers (0)

Categories

Find more on Biomedical Signal Processing in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!