Finite Differencing

As the name implies, this approach uses finite differencing to compute Δ y Δ b MathType@MTEF@5@5@+= feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2Caerbd9MBZ9 gBHnharuavP1wzZbItLDhis9wBH5garmWu51MyVXgaruWqVvNCPvMC G4uz3bqeeuuDJXwAKbsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4 rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9 pg0FirpepeKkFr0xfr=xfr=xb9adbaGaciGadmWaamaaciGaaqqace qbcaGcbaWaaSaaaeaacqqHuoarcaWG5baabaGaeuiLdqKaamOyaaaa aaa@3FD6@

First, a change in b MathType@MTEF@5@5@+= feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2Caerbd9MBZ9 gBHnharuavP1wzZbItLDhis9wBH5garmWu51MyVXgaruWqVvNCPvMC G4uz3bqeeuuDJXwAKbsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4 rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9 pg0FirpepeKkFr0xfr=xfr=xb9adbaGaciGadmWaamaaciGaaqqace qbcaGcbaGaamOyaaaa@3BFC@ , Δ b MathType@MTEF@5@5@+= feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2Caerbd9MBZ9 gBHnharuavP1wzZbItLDhis9wBH5garmWu51MyVXgaruWqVvNCPvMC G4uz3bqeeuuDJXwAKbsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4 rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9 pg0FirpepeKkFr0xfr=xfr=xb9adbaGaciGadmWaamaaciGaaqqace qbcaGcbaGaeuiLdqKaamOyaaaa@3D62@ is selected. Then the change in the output Δ y Δ b MathType@MTEF@5@5@+= feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2Caerbd9MBZ9 gBHnharuavP1wzZbItLDhis9wBH5garmWu51MyVXgaruWqVvNCPvMC G4uz3bqeeuuDJXwAKbsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4 rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9 pg0FirpepeKkFr0xfr=xfr=xb9adbaGaciGadmWaamaaciGaaqqace qbcaGcbaWaaSaaaeaacqqHuoarcaWG5baabaGaeuiLdqKaamOyaaaa aaa@3FD6@ is computed as shown below.(1)
Δ y Δ b     y ( x ( b + Δ b ) , x ˙ ( b + Δ b ) , b + Δ b ) y ( x ( b ) , x ˙ ( b ) , b ) Δ b MathType@MTEF@5@5@+= feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2Caerbd9MBZ9 gBHnharuavP1wzZbItLDhis9wBH5garmWu51MyVXgaruWqVvNCPvMC G4uz3bqeeuuDJXwAKbsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4 rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9 pg0FirpepeKkFr0xfr=xfr=xb9adbaGaciGadmWaamaaciGaaqqace qbcaGcbaWaaSaaaeaacqqHuoarcaWG5baabaGaeuiLdqKaamOyaaaa caqGGaGaeyisISRaaeiiamaalaaabaGaamyEamaabmaabaGaamiEam aabmaabaGaamOyaiabgUcaRiabfs5aejaadkgaaiaawIcacaGLPaaa caGGSaGabmiEayaacaWaaeWaaeaacaWGIbGaey4kaSIaeuiLdqKaam OyaaGaayjkaiaawMcaaiaacYcacaWGIbGaey4kaSIaeuiLdqKaamOy aaGaayjkaiaawMcaaiabgkHiTiaadMhadaqadaqaaiaadIhadaqada qaaiaadkgaaiaawIcacaGLPaaacaGGSaGabmiEayaacaWaaeWaaeaa caWGIbaacaGLOaGaayzkaaGaaiilaiaadkgaaiaawIcacaGLPaaaae aacqqHuoarcaWGIbaaaaaa@6706@

This approach is quite labor intensive and is typically used only for small-scale design sensitivity analysis (~ 20 variables). For a system with Nb design variables, this approach requires 2 ( N b + 1 ) MathType@MTEF@5@5@+= feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2Caerbd9MBZ9 gBHnharuavP1wzZbItLDhis9wBH5garmqr1ngBPrgitLxBI9gBaerb d9wDYLwzYbItLDharqqr1ngBPrgifHhDYfgasaacH8srps0lbbf9q8 WrFfeuY=Hhbbf9v8qqaqFr0xc9pk0xbba9q8WqFfea0=yr0RYxir=J bba9q8aq0=yq=He9q8qqQ8frFve9Fve9Ff0dmeaacaGacmWadaWaai GacaabbiqafiaakeaacaaIYaGaaiikaabbaaaaaaaaIXwyJTgapeGa amOta8aadaWgaaWcbaWdbiaadkgaa8aabeaak8qacqGHRaWkcaaIXa WdaiaacMcaaaa@4599@ simulations. Two simulations are needed to compute y ( x ( b + Δ b ) , x ˙ ( b + Δ b ) , b + Δ b )  and  y ( x ( b ) , x ˙ ( b ) , b ) MathType@MTEF@5@5@+= feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2Caerbd9MBZ9 gBHnharuavP1wzZbItLDhis9wBH5garmWu51MyVXgaruWqVvNCPvMC G4uz3bqeeuuDJXwAKbsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4 rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9 pg0FirpepeKkFr0xfr=xfr=xb9adbaGaciGadmWaamaaciGaaqqace qbcaGcbaGaamyEamaabmaabaGaamiEamaabmaabaGaamOyaiabgUca Riabfs5aejaadkgaaiaawIcacaGLPaaacaGGSaGabmiEayaacaWaae WaaeaacaWGIbGaey4kaSIaeuiLdqKaamOyaaGaayjkaiaawMcaaiaa cYcacaWGIbGaey4kaSIaeuiLdqKaamOyaaGaayjkaiaawMcaaiaabc cacaqGHbGaaeOBaiaabsgacaqGGaGaamyEamaabmaabaGaamiEamaa bmaabaGaamOyaaGaayjkaiaawMcaaiaacYcaceWG4bGbaiaadaqada qaaiaadkgaaiaawIcacaGLPaaacaGGSaGaamOyaaGaayjkaiaawMca aaaa@6006@ . Nb +1 simulations are needed to compute y ( x ( b + Δ b ) , x ˙ ( b + Δ b ) , b + Δ b )  and  y ( x ( b ) , x ˙ ( b ) , b ) MathType@MTEF@5@5@+= feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2Caerbd9MBZ9 gBHnharuavP1wzZbItLDhis9wBH5garmWu51MyVXgaruWqVvNCPvMC G4uz3bqeeuuDJXwAKbsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4 rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9 pg0FirpepeKkFr0xfr=xfr=xb9adbaGaciGadmWaamaaciGaaqqace qbcaGcbaGaamyEamaabmaabaGaamiEamaabmaabaGaamOyaiabgUca Riabfs5aejaadkgaaiaawIcacaGLPaaacaGGSaGabmiEayaacaWaae WaaeaacaWGIbGaey4kaSIaeuiLdqKaamOyaaGaayjkaiaawMcaaiaa cYcacaWGIbGaey4kaSIaeuiLdqKaamOyaaGaayjkaiaawMcaaiaabc cacaqGHbGaaeOBaiaabsgacaqGGaGaamyEamaabmaabaGaamiEamaa bmaabaGaamOyaaGaayjkaiaawMcaaiaacYcaceWG4bGbaiaadaqada qaaiaadkgaaiaawIcacaGLPaaacaGGSaGaamOyaaGaayjkaiaawMca aaaa@6006@ , k = 1... N b MathType@MTEF@5@5@+= feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2Caerbd9MBZ9 gBHnharuavP1wzZbItLDhis9wBH5garmWu51MyVXgaruWqVvNCPvMC G4uz3bqeeuuDJXwAKbsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4 rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9 pg0FirpepeKkFr0xfr=xfr=xb9adbaGaciGadmWaamaaciGaaqqace qbcaGcbaGaaiilaiaadUgacqGH9aqpcaaIXaGaaiOlaiaac6cacaGG UaGaamOtamaaBaaaleaacaWGIbaabeaaaaa@4272@ . In other words, one for each design variable and one single simulation for the current design.

When finite differencing, MotionSolve provides parallel processing as an option to compute the sensitivity matrix [ Δ y Δ b ] MathType@MTEF@5@5@+= feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2Caerbd9MBZ9 gBHnharuavP1wzZbItLDhis9wBH5garmWu51MyVXgaruWqVvNCPvMC G4uz3bqeeuuDJXwAKbsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4 rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9 pg0FirpepeKkFr0xfr=xfr=xb9adbaGaciGadmWaamaaciGaaqqace qbcaGcbaWaamWaaeaadaWcaaqaaiabfs5aejaadMhaaeaacqqHuoar caWGIbaaaaGaay5waiaaw2faaaaa@41C8@ . See the example below for more details on how to use the parallel approach.

The major challenge with finite differencing is selecting the right Δ b MathType@MTEF@5@5@+= feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2Caerbd9MBZ9 gBHnharuavP1wzZbItLDhis9wBH5garmWu51MyVXgaruWqVvNCPvMC G4uz3bqeeuuDJXwAKbsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4 rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9 pg0FirpepeKkFr0xfr=xfr=xb9adbaGaciGadmWaamaaciGaaqqace qbcaGcbaGaeuiLdqKaamOyaaaa@3D62@ . If this is too small, the sensitivities get lost in the numerical error in the solution. If these are too large, the nonlinearity of the solution is overlooked. In both cases, the sensitivities can have significant error. The perturbation Δ b MathType@MTEF@5@5@+= feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2Caerbd9MBZ9 gBHnharuavP1wzZbItLDhis9wBH5garmWu51MyVXgaruWqVvNCPvMC G4uz3bqeeuuDJXwAKbsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4 rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9 pg0FirpepeKkFr0xfr=xfr=xb9adbaGaciGadmWaamaaciGaaqqace qbcaGcbaGaeuiLdqKaamOyaaaa@3D62@ is also dependent on the scale and units of the system. In MotionSolve, Δ b MathType@MTEF@5@5@+= feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2Caerbd9MBZ9 gBHnharuavP1wzZbItLDhis9wBH5garmWu51MyVXgaruWqVvNCPvMC G4uz3bqeeuuDJXwAKbsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4 rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9 pg0FirpepeKkFr0xfr=xfr=xb9adbaGaciGadmWaamaaciGaaqqace qbcaGcbaGaeuiLdqKaamOyaaaa@3D62@ is calculated by the following formula:(2)
Δ b = Optimizer .fd_step × max ( 1 , b ) MathType@MTEF@5@5@+= feaagKart1ev2aqatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLn hiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr 4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq=Jc9 vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0FirpepeKkFr0xfr=x fr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaGaeuiLdqKaam Oyaiabg2da9iaab+eacaqGWbGaaeiDaiaabMgacaqGTbGaaeyAaiaa bQhacaqGLbGaaeOCaiaab6cacaqGMbGaaeizaiaab+facaqGZbGaae iDaiaabwgacaqGWbGaey41aqRaaeyBaiaabggacaqG4bWaaeWaaeaa caaIXaGaaiilaiaadkgaaiaawIcacaGLPaaaaaa@5194@

This means you can change the perturbation step by providing different value to Optimizer.fd_step. In summary, finite differencing is applicable only for small problems and there are some hard-to-solve issues regarding what the perturbations Δ b MathType@MTEF@5@5@+= feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2Caerbd9MBZ9 gBHnharuavP1wzZbItLDhis9wBH5garmWu51MyVXgaruWqVvNCPvMC G4uz3bqeeuuDJXwAKbsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4 rqqrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9 pg0FirpepeKkFr0xfr=xfr=xb9adbaGaciGadmWaamaaciGaaqqace qbcaGcbaGaeuiLdqKaamOyaaaa@3D62@ should be.