• 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)

+1 głos
48 wizyt
pytanie zadane 6 dni temu w C i C++ przez haitoke Nowicjusz (170 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ź 6 dni temu przez Wiciorny Ekspert (221,630 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 6 dni temu przez haitoke Nowicjusz (170 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ź 6 dni temu przez haitoke Nowicjusz (170 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ź 68 wizyt
pytanie zadane 20 lipca 2020 w C i C++ przez Kacperek_code Obywatel (1,650 p.)
0 głosów
3 odpowiedzi 292 wizyt

88,311 zapytań

136,904 odpowiedzi

305,517 komentarzy

58,593 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...