• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Obliczanie wartości funkcji dla kilku x (suma iloczynów)

Object Storage Arubacloud
+1 głos
185 wizyt
pytanie zadane 18 czerwca 2022 w C i C++ przez haitoke Nowicjusz (240 p.)

Cześć, posiadam daną funkcję w postaci f(x) = -57.00000*x^0 + 108.08333*x^1 + -64.62500*x^2 + 15.91667*x^3 + -1.37500*x^4

Muszę obliczyć dla niej f(x) dla 5 x-ów wczytanych z pliku. W moim przypadku jest to 1, 2, 3, 4, 5. 

Rozumiem to tak, że najpierw liczę wartości iloczynów dla x[0], = 1, x[1] = 2, x[2] = 3, x[3] = 4, x[4] = 5;

podstawiając je po kolei i otrzymam 5 iloczynów które później muszę zsumować. 

 

Z pliku wczytuję dane do zmiennej xi[i] - są to wartości X z pliku.

Do funkcji przekazuję wi[i] - są to wczytane współczynniki z obliczonego wzoru funkcji. 

 

Funkcja  do obliczeń wygląda tak, jednak daje nieprawidłowe wyniki (na razie chcę uzyskać prawidłowe wartości iloczynów), bo później już muszę tylko zsumować odpowiednie

Poniżej kod:

double f(double a, double w[], int n)
{
    double *x = new double[n];

    for(int i = 0; i < n; i++)
    {
       x[i] = a;
    }

    double *wsp = new double[n];
    double *iloczyn = new double[n];
    double *suma = new double[n];

    for(int k = 0; k < n; k++)
    {
        for(int j = 0; j < n; j++)
        {
            iloczyn[j] = w[j] * pow(x[k], j);
        }
    }

    //   -57 * pow(a, 0) + 108.08333 * pow(a, 1) + -64.625 * pow(a, 2) + 15.91667 * pow(a, 3) + -1.375 * pow(a, 4)
}

Stwierdziłem, że przyda się przechowywać wartości w tablicach np. wartosc[0] = f(xi[0], &w[0], n) itd. 

double *wartosc = new double[n];
    
    for(int i = 0; i < n; i++)
    {
        wartosc[i] = f(xi[i], &wi[i], n);
    }

Proszę o wskazówki dotyczące obliczania iloczynów.

 k musi być stałe przez cały czas działania drugiej pętli, obliczam 5 iloczynów z wartością x[0] a potem kolejne 5 iloczynów z wartością x[1] itd. 

2 odpowiedzi

+1 głos
odpowiedź 18 czerwca 2022 przez Wiciorny Ekspert (269,590 p.)

Nie do końca: x- jest do potęgi więc f(x) jest wyrażona dla 1 wartości argumentu, stąd musisz obliczyć 5 razy funkcje ... :) ale nie sumować jej bo zmienna jest tylko jedna stąd :

f(1) =  57.00000*(1)^0 + 108.08333*(1)^1 + -64.62500*(1)^2 + 15.91667*(1)^3 + -1.37500*(1)^4

dla f(2) = 57.00000*(2)^0 + 108.08333*(2)^1 + -64.62500*(2)^2 + 15.91667*(2)^3 + -1.37500*(2)^4

itd.... 
dla każdej jednej zmienne f(x)  liczysz iloczyn potęg dla X i sumujesz.
Wyniki jak najbardziej możesz zapisywać do tablicy, potem wypisać rezultat.

Zdefiniuj każde wyrażenie osobno : 
-57.00000*x^0, następnie  -57.00000*x^0  ( i podstawiaj wartość odczytaną od użytkownika ), taki symboliczny przyklad np. stworzyc funkcje ktore jako argument przyjmą wspomniany x i podniosą go do odpowiedniej potęgi, następnie pomnożą przez współczynnik -> całkowite f(x) będzie zatem sumą wykoniania każdej z funkcji. 

komentarz 18 czerwca 2022 przez haitoke Nowicjusz (240 p.)

Wartosci w funkcji juz sie zgadzają, iloczyny też.

 

Zdefiniuj każde wyrażenie osobno : 
-57.00000*x^0, następnie  -57.00000*x^0  ( i podstawiaj wartość odczytaną od użytkownika ), taki symboliczny przyklad np. stworzyc funkcje ktore jako argument przyjmą wspomniany x i podniosą go do odpowiedniej potęgi, następnie pomnożą przez współczynnik -> całkowite f(x) będzie zatem sumą wykoniania każdej z funkcji. 

Nie mogę tego zrobić, dlatego że wzór funkcji (wielomian) jest obliczany na podstawie wczytanych x i y. Stąd funkcja do obliczania też musi być dostosowana pod każdy wzór jaki wyjdzie z obliczeń.

 

 

0 głosów
odpowiedź 18 czerwca 2022 przez haitoke Nowicjusz (240 p.)

Źle przekazałem dane do funkcji... wywołanie powinno wyglądać tak:

f(xi, wi, n)

Więc sama funkcja musi mieć postać

double f(double a[], double w[], int n)

Oczywiście wywołanie bez pętli angry

Podobne pytania

0 głosów
1 odpowiedź 365 wizyt
pytanie zadane 20 lipca 2020 w C i C++ przez Kacperek_code Obywatel (1,690 p.)
0 głosów
3 odpowiedzi 659 wizyt

92,536 zapytań

141,376 odpowiedzi

319,451 komentarzy

61,920 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...